读取行之间没有分隔符的文件
Read file that has no delimiter between rows
我有一个非常明显的问题,但我找不到 pandas 解决方案(I found this,接近)。
我的文本文件没有行分隔符。因此,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
如何让文件读取每三个逗号作为换行符?
也许标准 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
使用**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
您不需要 pandas 来执行此操作,您可以只使用本机 python。如果文件格式正确,即如您所写
header_1, header_2, header_3, 1, jan, etc
您可以只使用字符串方法,例如将列表拆分并重组为您想要的二维数组形状。如果您想稍后使用 pandas,您可以从那里创建数据框。
假设前几个条目是列名。您可以 split
文本,找到 headers 的数量,并对其余数据进行分区以匹配 headers 的数量:
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
我有一个非常明显的问题,但我找不到 pandas 解决方案(I found this,接近)。
我的文本文件没有行分隔符。因此,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
如何让文件读取每三个逗号作为换行符?
也许标准 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
使用**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
您不需要 pandas 来执行此操作,您可以只使用本机 python。如果文件格式正确,即如您所写
header_1, header_2, header_3, 1, jan, etc
您可以只使用字符串方法,例如将列表拆分并重组为您想要的二维数组形状。如果您想稍后使用 pandas,您可以从那里创建数据框。
假设前几个条目是列名。您可以 split
文本,找到 headers 的数量,并对其余数据进行分区以匹配 headers 的数量:
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