无法过滤熊猫数据框中的行

时间:2018-08-27 12:15:28

标签: python pandas dataframe

我有一个数据框,其中name列有一些值。

使用Counter()中的collections

Counter(df.name)

给予

Counter({'': 13460,
         'alpha': 986,
         'beta': 22480,
         'gamma': 123})

这样做之后:

df['name'] = df.loc[df['name'] != '']['name'].apply(lambda x: x + '-suffix')
Counter(df.name)

我得到:

Counter({nan: 13460,
         'alpha-suffix': 986,
         'beta-suffix': 22480,
         'gamma-suffix': 123})

如何选择所有没有空字符串的行?

2 个答案:

答案 0 :(得分:0)

您无法分配回来,因为对于不匹配的值,将获得NaN

df = pd.DataFrame({'name': ['','d','','d'], 'val': [10, 20,20,30]})
print(df)
  name  val
0        10
1    d   20
2        20
3    d   30

df['name'] = df.loc[df['name'] != '', 'name']
print(df)
  name  val
0  NaN   10
1    d   20
2  NaN   20
3    d   30

df['name'] = df.loc[df['name'] != '', 'name']
print(Counter(df.name))
Counter({nan: 2, 'd': 2})

s = df.loc[df['name'] != '', 'name']
print(Counter(s))
Counter({'d': 2})

答案 1 :(得分:0)

df['name'] = df['name'].apply(lambda x: x + '-suffix' if x!='' else x)

您可以将该功能应用于有条件的每个人。它将为您提供正确的行数 也就是说,如果您要保留相同的数据集。否则,您仍然可以创建一个新的。您只是不能将同一行用于不同的行数。

temp_df = df['name'] != '']