我有以下数据框:
userId firstName lastName gender level
61 -1 Not Provided Not Provided Not Provided paid
100 -1 Not Provided Not Provided Not Provided free
两个userId
都是-1
,因为我执行了代码user_df['userId'] = user_df['userId'].replace(r'^\s*$', '-1', regex=True)
。
是否可以设置连续的负数,例如 -1、-2、...?
最佳答案
如果只想替换空字符串,请使用 Series.str.contains
对于此值的掩码,然后添加长度为 bool 掩码中的 True
总和的数组:
user_df = pd.DataFrame({'userId':['','','qq','']})
m = user_df['userId'].str.contains(r'^\s*$')
user_df.loc[m, 'userId'] = -pd.np.arange(1, m.sum() + 1)
print (user_df)
. userId
0 -1
1 -2
2 qq
3 -3
详细信息:
user_df.loc[m, 'userId'] = -pd.np.arange(1, m.sum() + 1)
print (m)
0 True
1 True
2 False
3 True
Name: userId, dtype: bool
print (m.sum())
3
print (-pd.np.arange(1, m.sum() + 1))
[-1 -2 -3]
<小时/>
这里也可以 import numpy pandas 所需的内容:
import numpy as np
m = user_df['userId'].str.contains(r'^\s*$')
user_df.loc[m, 'userId'] = -np.arange(1, m.sum() + 1)
关于python - 生成负数序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59374555/