Python 将列中的数字拆分为单独列中的数字
我有一个csv文件,看起来像这样(访问不能聚合,因为它们指的是天,例如2=星期一,3=星期二..等等) 我想拆分“访问”列,以便将每个数字放在单独的列中。大概是这样的: 如何使用python实现这一点?我希望列数与位数相同。我有1000行 我开始用这个代码,但它就是不起作用Python 将列中的数字拆分为单独列中的数字,python,pandas,dataframe,split,Python,Pandas,Dataframe,Split,我有一个csv文件,看起来像这样(访问不能聚合,因为它们指的是天,例如2=星期一,3=星期二..等等) 我想拆分“访问”列,以便将每个数字放在单独的列中。大概是这样的: 如何使用python实现这一点?我希望列数与位数相同。我有1000行 我开始用这个代码,但它就是不起作用 import pandas as pd file=pd.read_csv('file.csv') data = [] with open('file.csv', 'r') as fh: for line in fh:
import pandas as pd
file=pd.read_csv('file.csv')
data = []
with open('file.csv', 'r') as fh:
for line in fh:
data.append(line.split())
data = dict(zip(*data))
d = { v for in [int(c)])
data['visits'][1:])]}
d['ID'] = data['ID']
d['visits'] = data['visits'][0]
data = pd.DataFrame(d)
使用
str.split
:
df
ID visits
0 1 12 1 40 50
1 2 56 2 567 34
2 3 4 5 345 78
visits = df['visits'].str.split(expand=True).add_prefix('visit_')
visits
visit_0 visit_1 visit_2 visit_3
0 12 1 40 50
1 56 2 567 34
2 4 5 345 78
接下来,将访问
与ID
连接起来:
df = pd.concat([df[['ID']], visits], 1)
df
ID visit_0 visit_1 visit_2 visit_3
0 1 12 1 40 50
1 2 56 2 567 34
2 3 4 5 345 78
如果您希望每个号码的每个数字都是单独的,您可以链接一个
df.apply
call。此外,要将8
替换为0
,请使用df.replace
visits = df['visits'].str.replace('\s+', '')\
.apply(lambda x: pd.Series(list(x))).add_prefix('visit_')\
.replace('[89]', 0, regex=True)
visits
ID visit_0 visit_1 visit_2 visit_3 visit_4 visit_5 visit_6 visit_7
0 1 1 2 1 4 0 5 0 NaN
1 2 5 6 2 5 6 7 3 4
2 3 4 5 3 4 5 7 0 NaN
请注意,每列都是一列字符串(object
type)。但是,如果希望将它们作为整数,则需要去掉NaN
s。如果您不介意删除NaN
列,那么此解决方案可以简化一点
visits = df.visits.str.replace('\s+', '')\
.apply(lambda x: pd.Series(list(x)))\
.dropna(axis=1).add_prefix('visit_').astype(int) % 8
visits
visit_0 visit_1 visit_2 visit_3 visit_4 visit_5 visit_6
0 1 2 1 4 0 5 0
1 5 6 2 5 6 7 3
2 4 5 3 4 5 7 0
您仍然需要使用
pd.concat将visions
与df.ID
连接起来。首先:您确定位数始终相同吗?如果不是这样的话,那么您可能想做其他事情(例如,在该列上应用函数)。@pazqo通过查看它,我会说不。它是一个大文件(1000行)。这就是我想使用Python的原因。你想分割数字还是数字?分割数字似乎毫无意义。另外,你能在文本中粘贴一些数据吗?图片没有帮助,这与流行的观点相反。@cᴏʟᴅsᴘᴇᴇᴅ 我有一个超过100个数字的列,我想拆分此列,以便每个数字都有自己的列,然后使用df.visions.str.split(expand=True)