Python 将列中的数字拆分为单独列中的数字

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:

我有一个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:
 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)