繁体   English   中英

检查 dataframe 列是否包含 Python 中的字符串类型

[英]Check if dataframe column contain string type in Python

我有一个 dataframe 这样的:

在此处输入图像描述

如果第 1列是字符串,我需要第 2 列,否则仍然需要第 1 列。

试过这个:

df.loc[df[1].dtype != np.number, df[1]] = df.loc[df[1].dtype != np.number, df[1]]  

但它给了我一个关键错误:True

在这种情况下,列表理解可能会派上用场,请查看:

df = pd.DataFrame()
df[0] = ["some", "dummy", "data", "filling", "up"]
df[1] = ["0","foo","2","3","bar"]
df[2] = [9,8,7,6,5]
df[3] = [item[1][1] if item[1][1].isnumeric() else item[1][2] for item in df.iterrows() ]

如果它是数字,则使用第 1 行中的项目分配新行,否则使用第 2 行中的项目。

这就是你需要的。

我假设您的 dataframe 名称是 df。

for i, a in enumerate(df[1]):
  if type(a) == str:
    df.iloc[i, 1] = df.iloc[i, 2]
df

假设您想要的 output 是将第 1 列中的所有非数字值替换为第 2 列中的值,这就是您的操作方式。

假设您的初始 dataframe 是这样的:

>>> df
        0     1  2
0    some   foo  1
1  random    -2  2
2    text   bar  3
3    some   NaN  4
4  random    -5  5
5    text    -6  6
6    some  None  7

您首先在所需列上调用pandas.to_numeric ,指定将非数字值放入 NaN。

在此之后,您使用第 2 列中的匹配元素填充这些 NaN,并(可选)转换为 int 获得的系列。

>>> df['1'] = pd.to_numeric(df['1'], errors='coerce').fillna(df['2']).astype(int)
>>> df
        0  1  2
0    some  1  1
1  random -2  2
2    text  3  3
3    some  4  4
4  random -5  5
5    text -6  6
6    some  7  7

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM