python-3.x - 在数据框上使用替换后防止列名消失
问题描述
所以我有一个真实的数据框,它有点遵循下一个结构:
d = {'col1':['1_ABC','2_DEF','3 GHI']}
df = pd.DataFrame(data=d)
基本上,一些条目有“_”,其他有“”。我的目标是将第一个数字分成一个新列并保留其余部分。为此,我想我首先将'_'替换为' '以规范化所有内容,然后简单地用' '拆分以获得新列。
#Replace the '_' for ' '
new_df['Name'] = df['Name'].str.replace('_',' ')
我的问题是,现在我的new_df现在丢失了它的列名:
0 1 ABC
1 2 DEF
有什么办法可以防止这种情况发生?
谢谢!
解决方案
函数str.replace
return Series
,所以没有列名,只有Series
名称。
s = df['col1'].str.replace('_',' ')
print (s)
0 1 ABC
1 2 DEF
2 3 GHI
Name: col1, dtype: object
print (type(s))
<class 'pandas.core.series.Series'>
print (s.name)
col1
如果需要将新列分配给相同的DataFrame
- df['Name']
:
df['Name'] = df['col1'].str.replace('_',' ')
print (df)
col1 Name
0 1_ABC 1 ABC
1 2_DEF 2 DEF
2 3 GHI 3 GHI
或覆盖原始列的值:
df['col1'] = df['col1'].str.replace('_',' ')
print (df)
col1
0 1 ABC
1 2 DEF
2 3 GHI
如果需要新的一列DataFrame
用于Series.to_frame
转换Series
为df
:
df2 = df['col1'].str.replace('_',' ').to_frame()
print (df2)
col1
0 1 ABC
1 2 DEF
2 3 GHI
也可以定义新的列名:
df1 = df['col1'].str.replace('_',' ').to_frame('New')
print (df1)
New
0 1 ABC
1 2 DEF
2 3 GHI
就像@anky_91 评论的那样,如果需要新的 2 列添加str.split
:
df1 = df['col1'].str.replace('_',' ').str.split(expand=True)
df1.columns = ['A','B']
print (df1)
A B
0 1 ABC
1 2 DEF
2 3 GHI
如果需要将列添加到现有的DataFrame
:
df[['A','B']] = df['col1'].str.replace('_',' ').str.split(expand=True)
print (df)
col1 A B
0 1_ABC 1 ABC
1 2_DEF 2 DEF
2 3 GHI 3 GHI
推荐阅读
- python - 将两个具有冲突元素的 pyxb 绑定导入同一命名空间
- php - Laravel 包开发:没有为 [breadcrumbs] 定义提示路径
- ios - 如何设置 iOS 13 深色模式大标题颜色?
- google-chrome - xdebug-helper 未应用于 iframe
- java - 使用 Java 将 1000 像素图像大小调整为 200 像素时,图像质量更好
- elasticsearch - 尝试在 ELK Stack 7.3.2 中为 APM 配置 APM 代理
- javafx - 服务任务完成时如何保持进度条进度?
- javascript - 测试期间未触发 Marionette onAttach 生命周期
- javascript - 如何将通过引用传递的对象设置为null?
- javascript - dbRefObject 后 For 循环无法正常工作