繁体   English   中英

从几个 .txt 文件创建一个数据框 - 每个文件都是一行有 25 个值

[英]Creating a dataframe from several .txt files - each file being a row with 25 values

所以,我有 7200 个 txt 文件,每个文件有 25 行。 我想从它们创建一个数据框,有 7200 行和 25 列——.txt 文件的每一行都是一个列的值。

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

但是,当我尝试这样做时: pd.read_csv('Data/fake-meta-information/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, delim_whitespace=True, 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 的答案可能比我的“更好”,但如果您想让您的代码在风格上更接近您目前正在做的事情,以下是另一种选择。

您正在获取当前输出(25x25,仅第一列中有数据),因为您读取的数据是 25x1,但您强制数据框具有 25 列,并且您的names=column_names参数。

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

  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. 转置 df 形成最终的 7200x25 df: df=df.T

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM