在数据框上使用替换后防止列名消失
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.replace
returnSeries
,所以没有列名,只有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
所以我有一个真正的数据框,它有点遵循下一个结构:
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.replace
returnSeries
,所以没有列名,只有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