文件名(来自多个文件)作为一个数据框中的列名

时间:2013-08-16 14:29:37

标签: python pandas

我有很多文本文件,其中包含一个列数据,不同的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       

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

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

1 个答案:

答案 0 :(得分: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