我試圖導入一組* .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