Bin*_*Bin 3 python dataframe pandas
我正在尝试连接 Pandas DataFrame 中的两列。问题是当任一系列中都存在 None 值时,结果为 NaN。由于真实数据非常大,有保留原始None值供以后参考的价值,希望不要更改列中的原始值。有没有办法在熊猫中实现这一目标?
创建一个示例数据帧:
import pandas as pd
f = pd.DataFrame([['a', 'b','c','a', 'b','c'],['1', '2','3', '4', '5','6', ]])
f = f.transpose()
f.columns = ['xx', 'yy']
f.xx[0] = None
f.yy[0] = None
f.xx[2] = None
f.yy[3] = None
xx yy
0 None None
1 b 2
2 None 3
3 a None
4 b 5
5 c 6
Run Code Online (Sandbox Code Playgroud)
我试过f['new_str'] = f.xx + f.yy和f['new_str'] = f['xx'] + f['yy']。如果任何值是 None 类型,则两者都将连接值设置为 NaN。我认为这是由于熊猫如何处理None类型。None 类型和 str 类型不能通过 '+' 运算符“添加”。
xx yy new_str
0 None None NaN
1 b 2 b2
2 None 3 NaN
3 a None NaN
4 b 5 b5
5 c 6 c6
Run Code Online (Sandbox Code Playgroud)
这是我想要做的:
f['new_str'] = f.xx.map(lambda x: '')
for idx, arow in f.iterrows():
con = ''
if arow.xx:
con += arow.xx
if arow.yy:
con += arow.yy
f.loc[idx,'new_str'] = con
f
xx yy new_str
0 None None
1 b 2 b2
2 None 3 3
3 a None a
4 b 5 b5
5 c 6 c6
Run Code Online (Sandbox Code Playgroud)
我的问题是大熊猫是否支持更优雅/更简单的方式来实现这一目标?
调用fillna每一列以将 Nones 设置为'',这是字符串连接下的标识元素。
f['new_str'] = f.xx.fillna('') + f.yy.fillna('')
Run Code Online (Sandbox Code Playgroud)
这提供了一个按照您想要的方式格式化的新列:
>>> f
xx yy new_str
0 None None
1 b 2 b2
2 None 3 3
3 a None a
4 b 5 b5
5 c 6 c6
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2083 次 |
| 最近记录: |