pandas 将.txt转换为csv

wr98u20j  于 2022-12-09  发布在  其他
关注(0)|答案(2)|浏览(213)

enter link description here我有这样的文本:

Roll no.   Name     S1     S2    S3     S4     S5

123       Subh      301   302   303     304   305

                    20     21   22      23     23

124      Sagar     306    200   207     205    201

                   30      32    43      81     22

我想在csv文件中转换这些,这样:

Roll no.,   Name,    S1,     S2,    S3,     S4,     S5,

123,       Subh,     [301   [302   [303     [304   [305

                     20],   21],  22],     23],     23],

124,      Sagar,     [306,   [200 ,  [207 ,    [205,    [201,

                     30],      32],    43],     81],     22],

我尝试了所有的方法,但是都找不到解决的办法。
我还添加了文档以供参考。

vhmi4jdf

vhmi4jdf1#

您可以使用pandas.read_csvpandas.DataFrame.groupby来取得预期的输出。
试试这个:

import pandas as pd

df = pd.read_csv("new_created.txt", sep="\s\s+", engine="python")
df.iloc[1::2] = df.iloc[1::2].shift(2, axis=1)
df.ffill(inplace=True)
out = df.groupby(["Roll No.", "Marks"], as_index=False).agg(list)

然后,如果需要生成(.csv),请使用pandas.DataFrame.to_csv

out.to_csv("output_file.csv", sep="\t", index=False) #tab-delimited csv
#输出:
print(out.head().to_string())

    Roll No.             Marks         S1         S2         S3         S4          S5          S6
0  160200006  Christine Nelson  [301, 28]  [124, 30]  [027, 24]  [028, 23]  [29.0, 22]  [48.0, 19]
1  160200008   Kelsey Thompson  [301, 19]  [302, 13]  [027, 12]  [028, 12]  [29.0, 13]  [48.0, 19]
2  160200013       Wendy Yoder  [301, 23]  [302, 25]  [802, 19]  [803, 18]  [41.0, 17]  [48.0, 16]
3  160200016     Karen Fleming  [301, 26]  [124, 20]  [809, 16]  [834, 22]  [29.0, 14]  [48.0, 23]
4  160200021     Dillon Miller  [301, 26]  [124, 29]  [027, 12]  [028, 14]  [29.0, 19]  [48.0, 23]
t30tvxxf

t30tvxxf2#

你可以使用python正则表达式来分隔每一列和每一行。你可以学习Python正则表达式Here
另一个解决方案是使用CSV库的CSV文件处理程序。要了解更多关于它的文档,请单击here
最后,如果以上都不能解决你的问题,你可以使用numpy.loadtext()方法将它转换成数组。

相关问题