使用熊猫将每三行Python转换为一列

时间:2018-11-14 12:33:04

标签: python pandas

我有一个文本文件,其数据每3行重复一次。可以说是hashdirectorysub directory。数据如下所示:

a3s2d1f32a1sdf321asdf
Dir_321321
Dir2_asdf
s21a3s21d3f21as32d1f
Dir_65465
Dir2_werq
asd21231asdfa3s21d
Dir_76541
Dir2_wbzxc
....

我创建了一个python脚本来接收数据,每3行创建一列:

import pandas as pd

df1 = pd.read_csv('RogTest/RogTest.txt', delimiter = "\t", header=None)
df2 = df1[df1.index % 3 == 0]
df2 = df2.reset_index(drop=True) 
df3 = df1[df1.index % 3 == 1]
df3 = df3.reset_index(drop=True)
df4 = df1[df1.index % 3 == 2]
df4 = df4.reset_index(drop=True)
df5 = pd.concat([df2, df3], axis=1)
df6 = pd.concat([df5, df4], axis=1)

#Rename columns
df6.columns = ['Hash', 'Dir_1', 'Dir_2']
#Write to csv
df6.to_csv('RogTest/RogTest.csv', index=False, header=True)   

这很好用,但是我很好奇是否有一种更有效的方法来减少此代码吗?

1 个答案:

答案 0 :(得分:2)

您可以使用:

df_final = pd.DataFrame(np.reshape(df.values,(3, df.shape[0]/3)))
df_final.columns = ['Hash', 'Dir_1', 'Dir_2']

输出:

                    Hash       Dir_1       Dir_2
0  a3s2d1f32a1sdf321asdf  Dir_321321   Dir2_asdf
1   s21a3s21d3f21as32d1f   Dir_65465   Dir2_werq
2     asd21231asdfa3s21d   Dir_76541  Dir2_wbzxc