gpt4 book ai didi

python - 将列中的数字拆分为单独列中的数字

转载 作者:行者123 更新时间:2023-11-30 22:29:25 27 4
gpt4 key购买 nike

我有一个如下所示的 csv 文件(无法聚合访问次数,因为它们指的是天数,例如 2=星期一、3=星期二等)

enter image description here

我想拆分“访问”列,以便将每个数字放在单独的列中。像这样的事情:

enter image description here

我怎样才能用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

接下来,将 visitsID 连接起来:

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 调用。此外,要将 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 类型)。但是,如果您希望它们为整数,则需要去掉 NaN。如果您同意删除 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.concatvisitsdf.ID 连接起来。

关于python - 将列中的数字拆分为单独列中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46380830/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com