在数据框上使用替换后防止列名消失

Prevent column name from disappearing after using replace on dataframe

所以我有一个真正的数据框,它有点遵循下一个结构:

d = {'col1':['1_ABC','2_DEF','3 GHI']}
df = pd.DataFrame(data=d)

基本上,有些条目有 " _ ",其他条目有 " "。 我的目标是将第一个数字拆分为一个新列并保留其余数字。为此,我想我首先将 '_' 替换为 ' ' 以标准化所有内容,然后简单地按 [=23= 拆分]' ' 获取新列。

#Replace the '_' for ' '
new_df['Name'] = df['Name'].str.replace('_',' ')

我的问题是现在我的 new_df 丢失了它的列名:

0    1 ABC
1    2 DEF

有什么方法可以防止这种情况发生?

谢谢!

函数str.replacereturnSeries,所以没有列名,只有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_frameSeries 转换为 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