从多个.txt文件创建一个数据框-每个文件都是一个包含25个值的行

问题描述

因此,我有7200个txt文件,每个文件有25行。我想从中创建一个数据框,其中包含7200行和25列-.txt文件的每一行都将是一个列的值。

为此,我首先创建了一个长度为25的列表 column_names ,并测试了导入单个.txt文件的情况。

但是,当我尝试这样做时: pd.read_csv('Data/fake-Meta-@R_383_4045@ion/1-Meta.txt',delim_whitespace=True,names=column_names)

我得到25x25数据帧,其值仅在第一列。如何以一种方式将txt行作为值插入到列中,而不是将所有行都插入到第一列中并创建25行呢?

下一步是创建 for循环,以将每个文本文件追加为新行。

大概是这样的:

dir1 = *folder_path*
list = os.listdir(dir1)
number_files = len(list)

for i in range(number_files):
        title = list[i]
        df_temp = pd.read_csv(dir1 + title,names=column_names)
        df = df.append(df_temp,ignore_index=True)
        

我希望我已经清楚了。预先谢谢大家!

解决方法

read_csv在源文件中每行生成一行,但是您希望它们成为列。您可以读取行并转到列,但是由于这些文件每行只有一个值,因此您可以在numpy中读取它们,并将每个结果数组用作数据帧中的行。

import numpy as np
import pandas as pd
from pathlib import Path

dir1 = Path(".")
df = pd.DataFrame([np.loadtxt(filename) for filename in dir1.glob("*.txt")])
print(df)
,

tdelaney的答案可能比我的答案“更好”,但是如果您希望使代码在样式上更接近于您当前正在执行的操作,则可以选择以下方法。

由于您读取的数据为25x1,因此获得了当前输出(仅第一列中的数据为25x25),但是您使用names=column_names参数强制数据帧具有25列。

要解决此问题,只需等到最后应用列名:

  1. 获取25x1 df(删除名称参数):

    df_temp = pd.read_csv(dir1 + title,delim_whitespace=True)

  2. 将25x1 df附加为25x7200 df:df = df.append(df_temp,ignore_index=True)

  3. 转置形成最终7200x25 df的df:df=df.T

  4. 添加列名:df.columns=column_names