[英]Splitting one column into multiple columns with python pandas
我想在我的数据框中将一列拆分为多列。 它用逗号分隔。
我想在 excel 中应用类似“文本到列”的功能。
拆分列后,我将给出自己的标题。 'Turnstile' 是我的专栏的名字。 我有:
(A006, R079, 00-00-04, 5 AVE-59 ST)
每行中的数据类型。 最后,我想要:
A006 R079 00-00-04 5 AVE-59 ST
带有我将创建的标题。
我最后试过:
df.Turnstile.str.split().tolist()
但我只有'nan'
当我检查“转门”列的类型时,它显示“对象”。 我尝试将该系列转换为字符串:
df['Turnstile'] = df[['Turnstile'].astype(str)]
但它给了我:
AttributeError: 'list' object has no attribute 'astype'
请指教。
谢谢你。
也许另一种看待这个的方式是将一列元组转换为DataFrame
,如下所示:
In [10]: DataFrame(df['Turnstile'].tolist())
Out[10]:
0 1 2 3
0 A006 R079 00-00-04 5 AVE-59 ST
1 A006 R079 00-00-04 5 AVE-59 ST
2 A006 R079 00-00-04 5 AVE-59 ST
3 A006 R079 00-00-04 5 AVE-59 ST
4 A006 R079 00-00-04 5 AVE-59 ST
5 A006 R079 00-00-04 5 AVE-59 ST
6 A006 R079 00-00-04 5 AVE-59 ST
7 A006 R079 00-00-04 5 AVE-59 ST
8 A006 R079 00-00-04 5 AVE-59 ST
9 A006 R079 00-00-04 5 AVE-59 ST
如果是这种情况,下面是一个将元组列转换为DataFrame
并将其添加回原始数据帧的示例:
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
# create a fake dataframe, repeating the tuple given in the example
In [2]: df = DataFrame(data={'Observations': np.random.randn(10) * np.arange(10),
...: 'Turnstile': (('A006', 'R079', '00-00-04', '5 AVE-59 ST'),)*10})
In [3]: df.head()
Out[3]:
Observations Turnstile
0 -0.000000 (A006, R079, 00-00-04, 5 AVE-59 ST)
1 -0.022668 (A006, R079, 00-00-04, 5 AVE-59 ST)
2 -2.380515 (A006, R079, 00-00-04, 5 AVE-59 ST)
3 -4.209983 (A006, R079, 00-00-04, 5 AVE-59 ST)
4 3.932902 (A006, R079, 00-00-04, 5 AVE-59 ST)
# all at once turn the column of tuples into a dataframe and concat that with the original df
In [4]: df = pd.concat([df,DataFrame(df['Turnstile'].tolist())], axis=1, join='outer')
In [5]: df.head()
Out[5]:
Observations Turnstile 0 1 2 \
0 -0.000000 (A006, R079, 00-00-04, 5 AVE-59 ST) A006 R079 00-00-04
1 -0.022668 (A006, R079, 00-00-04, 5 AVE-59 ST) A006 R079 00-00-04
2 -2.380515 (A006, R079, 00-00-04, 5 AVE-59 ST) A006 R079 00-00-04
3 -4.209983 (A006, R079, 00-00-04, 5 AVE-59 ST) A006 R079 00-00-04
4 3.932902 (A006, R079, 00-00-04, 5 AVE-59 ST) A006 R079 00-00-04
3
0 5 AVE-59 ST
1 5 AVE-59 ST
2 5 AVE-59 ST
3 5 AVE-59 ST
4 5 AVE-59 ST
# i assume you don't need this column anymore
In [6]: del df['Turnstile']
如果可行,您当然可以根据需要命名新列。
这里有几个选项,如果您的数据是真正的 csv 格式,比如从 Excel 导出,您可以使用pandas.read_csv
读取文件,它会根据列分隔符自动拆分为列。
如果您的数据是带逗号的字符串列,您可以使用str.split
重新定义您的列,但据我所知,您需要将结果列转储为原始 Python 列表,然后重新转换为数据帧:
import pandas as pd
df = pd.DataFrame([["A006, R079, 00-00-04, 5 AVE-59 ST"]])
df2 = pd.DataFrame(df[0].str.split(',').tolist())
尝试做df.Turnstile.str.split(',')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.