3

我有许多文本文件,其中包含一列数据,不同的 dtype(float64,日期),里面没有标题。
我正在尝试编写以下代码:
- 获取所有不带扩展名的文件名 -> 创建一个列表(这可行!)
- 读取一个目录中的所有文件并将它们连接到一个具有一个数字索引的数据帧中。

我的代码:

filelist = os.listdir(path)                             #Make a file list
file_names=[os.path.splitext(x)[0] for x in filelist]   #Remove file extension

试过这个(第一个选项):

df_list = [pd.read_table(file) for file in filelist]
df = pd.concat(df_list,ignore_index=True)

...但是我从 6 个文件中获得了 3 列,其中包含完全混乱的数据。

也试过这个(第二个选项):

df=pd.DataFrame(columns=file_names)

for file in filelist:
    frame=pd.read_csv(file)
    df=df.append(frame, ignore_index=True)

...这也行不通。

任何意见,将不胜感激。

输入
Q*.txt 文件的开头只有零(大约 100 个值),并且在此数字之后显示。

Q1.txt   Q2.txt   T21     T22
  0       0      51.06    77.46
  0       0      50.32    77.33
  0       0      50.90    77.45

当我运行“第一个选项”时,我得到:

 filelist
 >>>['Q1.txt', 'Q2.txt','T21.txt', 'T22.txt']     
 file_names
 >>>['Q1', 'Q2','T21', 'T22']
 df.dtypes
 >>>0        object
 >>>51.06    object
 >>>77.46    object
 >>>dtype: object

输出文件

    0  51.06 77.46
 0  0       
 1  0       
 2  0       

看起来前 2 个文件(开头为 0 的文件)在一列中。第二个和第三个是文件 T21 和 T22 的第一个值。

感谢@Viktor Kerkez,我已经添加header=None到了pd.read_table,现在所有文件都在一个列中,dtype=object。
如何将所有文件拆分为多列?

4

1 回答 1

4

您可以执行以下操作:

import os
import pandas as pd

file_names = []
data_frames = []
for filename in os.listdir(path):
    name = os.path.splitext(filename)[0]
    file_names.append(name)
    df = pd.read_csv(filename, header=None)
    df.rename(columns={0: name}, inplace=True)
    data_frames.append(df)

combined = pd.concat(data_frames, axis=1)

在这里,我重命名了每个 DataFrame 列以匹配文件名,您可以省略该步骤,只需使用ignore_index=True.

于 2013-08-16T20:40:15.383 回答