我正在尝试导入一组* .txt文件。我需要将文件导入到Python中的Pandas 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文件加载到Pandas数据帧中?为什么read_csv不接受文件名的字符串?
答案 0 :(得分:3)
您可以将它们读入多个数据帧,然后将它们连接在一起。假设您有两个这样的文件,其中包含显示的数据。
In [6]:
filelist = ['val1.txt', 'val2.txt']
print pd.concat([pd.read_csv(item, names=[item[:-4]]) for item in filelist], axis=1)
val1 val2
0 16 16
1 54 54
2 -314 -314
3 1 1
4 15 15
5 4 4
6 153 153
7 86 86
8 4 4
9 64 64
10 373 373
11 3 3
12 434 434
13 31 31
14 93 93
15 53 53
16 873 873
17 43 43
18 11 11
19 533 533
20 46 46
答案 1 :(得分:1)
你非常接近。 ijk
已经是文件名,您无需访问该列表:
# Step 3: Build up DataFrame:
df = pd.DataFrame()
for ijk in filelist:
frame = pd.read_csv(ijk)
df = df.append(frame)
print df
将来,请准确提供工作代码。您导入from pandas import *
但是将pandas称为pd,意味着导入import pandas as pd
。
您还要小心变量名称。 files
实际上是单个文件路径,filelist
和filesList
与变量名称没有明显区别。将个人文档保存在python目录中似乎也是一个坏主意。