我试图导入一组* .txt文件。我需要将这些文件导入到Python中的Pandas DataFrame的连续列中。将多个* .txt文件读入Pandas Dataframe,并将文件名作为列标题
要求和背景资料:
- 每个文件都有一个号码列
- 没有头是存在于文件
- 正,负整数都是可能
- 的所有大小* .txt文件是相同的
- DataFrame的列必须具有文件的名称(不带扩展名)作为标头
- 提前未知文件数
这是一个* .txt文件样本。所有其他人都有相同的格式。
16
54
-314
1
15
4
153
86
4
64
373
3
434
31
93
53
873
43
11
533
46
这里是我的尝试:
import pandas as pd
import os
import glob
# Step 1: get a list of all csv files in target directory
my_dir = "C:\\Python27\Files\\"
filelist = []
filesList = []
os.chdir(my_dir)
# Step 2: Build up list of files:
for files in glob.glob("*.txt"):
fileName, fileExtension = os.path.splitext(files)
filelist.append(fileName) #filename without extension
filesList.append(files) #filename with extension
# Step 3: Build up DataFrame:
df = pd.DataFrame()
for ijk in filelist:
frame = pd.read_csv(filesList[ijk])
df = df.append(frame)
print df
步骤1和2的工作。我有步骤3中,我得到了以下错误消息的问题:
Traceback (most recent call last):
File "C:\Python27\TextFile.py", line 26, in <module>
frame = pd.read_csv(filesList[ijk])
TypeError: list indices must be integers, not str
问: 有没有更好的办法,这些* .txt文件加载到数据帧的熊猫?为什么read_csv不接受文件名字符串?
对不起,我忘了提及:有许多文件可能> 20。我强烈希望避免手动读取它们。另外,我不明白这个部分:“names = [item [: - 4]”。 -4的意义是什么? – 2014-10-17 00:39:02
您可以使用'os.listdir(PATH)'来获取'PATH'中所有文件的列表,这样就很容易。至于,'names = item [: - 4]':文件以''.txt''结尾,你不希望''.txt''成为列名的一部分,对吧? – 2014-10-17 01:19:25
谢谢。我尝试了这种方法:第1行 - df = pd.DataFrame()第2行 - 用于filesList中的项目:第3行 - df = pd.concat(pd.read_csv(item,names = [item [: - 4]])轴= 1)。但它给出了一个错误消息:“TypeError:第一个参数必须是像pandas对象一样的列表,你传递了一个类型为”DataFrame“的对象。有什么理由不采用这种方法? – 2014-10-17 01:54:01