我有一个数据框,其中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})
如何选择所有没有空字符串的行?
答案 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'] != '']