为了账号安全,请及时绑定邮箱和手机立即绑定

读取行之间没有分隔符的文件

读取行之间没有分隔符的文件

月关宝盒 2023-04-25 16:25:00
我有一个非常明显的问题,但我找不到熊猫解决方案(我找到了这个,很接近)。我的文本文件没有行分隔符。因此,pandas 将文件读取为具有单行和大量列的数据框。它看起来如下:header_1, header_2, header_3, 1, jan, 600, 2, feb, 900, 3, jan, 678我想每行读取三个元素。最终结果应如下所示:header_1  header_2  header_3         1       jan       600        2       feb       900        3       jan       678我怎样才能告诉文件读取每三个逗号作为换行符?
查看完整描述

4 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

假设前几个条目是列名。你可以split文本,找到标题的数量,并对其余数据进行分区以匹配标题的数量:


data = """header_1, header_2, header_3, 1, jan, 600, 2, feb, 900, 3, jan, 678"""


header = [head.strip() for head in data.split(',') if head.strip().startswith('header')]

rest = [head.strip() for head in data.split(',') if not head.strip().startswith('header')]

length = len(header)

rest = [rest[n:n+length] for n in range(0, len(rest), length)]

pd.DataFrame(rest, columns = header)




 header_1   header_2    header_3

0   1         jan         600

1   2         feb         900

2   3         jan         678


查看完整回答
反对 回复 2023-04-25
?
长风秋雁

TA贡献1757条经验 获得超7个赞

使用**Split function**后跟切片来创建数据框


a="header_1, header_2, header_3, 1, jan, 600, 2, feb, 900, 3, jan, 678"

a=a.split(",")

a1=[]

a2=[]

a3=[]

for i in range(0,len(a)):

    if(i%3==2):

        a1.append(a[i])

    elif(i%3==1):

        a2.append(a[i])

    else:

        a3.append(a[i])

    data={a3[0]:a3[1:],a2[0]:a2[1:],a1[0]:a1[1:]}

df=pd.DataFrame(data)

    

输出


    header_1       header_2           header_3

0   1              jan                    600

1   2              feb                    900

2   3              jan                    678


查看完整回答
反对 回复 2023-04-25
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

您不需要 pandas 来执行此操作,您可以只使用本机 python。如果文件格式正确,即如您所写

header_1, header_2, header_3, 1, jan, etc

您可以只使用字符串方法,例如将列表拆分和重组为您想要的二维数组形状。如果您想稍后使用熊猫,您可以从那里创建数据框。


查看完整回答
反对 回复 2023-04-25
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

也许标准str.split()就足够了:


txt = '''header_1, header_2, header_3, 1, jan, 600, 2, feb, 900, 3, jan, 678'''


txt = txt.split(',')

df = pd.DataFrame([*zip(txt[3::3], txt[4::3], txt[5::3])], columns=[*txt[0:3]])


print(df)

印刷:


  header_1  header_2  header_3

0        1       jan       600

1        2       feb       900

2        3       jan       678


查看完整回答
反对 回复 2023-04-25
  • 4 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信