我有很多文本文件,其中包含一个列数据,不同的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。
如何将所有文件拆分为多列?
答案 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
。