我有一對夫婦,所有具有相同的第一列(X
)文件,和相同的列名(X
,B
,C
),但第二和第三列是不同的值。合併文件到蟒蛇多指標數據幀,最後導出爲TXT
X | B | C
-----------
a 0 2
b 4 9
...
z 3 0
我想所有這些表合併成一個大的數據幀,但增加了每個部分是通過自己的索引訪問,例如基於文件。例如。 df['f1']['B']
將是[0, 4..., 3]
。最終結果將如下所示。
| f1 | f1 | f2 | f2
X | B | C | B | C
-----------------------
a 0 2 3 2
b 4 9 1 2
...
z 3 0 9 8
這是我到目前爲止的代碼
import pandas as pd
import numpy as np
import regex as re
dir = 'directory'
path = os.path.abspath(os.path.join(os.getcwd(), dir))
# List all files in folder
filenames = [name for name in os.listdir(path) if re.match(".*\.txt$", name)]
r_coln = re.compile(r"\.txt$")
frames = []
for i in range(len(filenames)):
filename = filenames[i]
coln = r_coln.sub("", filename)
if (i == 0):
# Subtract the first column which is identical for all frames
first_frame = pd.read_csv(os.path.join(path, filename), usecols=[0], sep="\t", names=[''], header=None)
frames.append(first_frame)
# Get frame with a new header
frames.append(pd.read_csv(os.path.join(path, filename), usecols=[1, 2], sep="\t", names=[coln, ''], header=None))
# Combine all frames
df = pd.concat(frames, axis=1)
這工作,因爲所產生的數據幀確實像我張貼上面異常的例子,我只有一個「頂」標題每個文件。使用names=[coln, coln]
而不是names=[coln, '']
導致兩列中的一列掉線(我不知道爲什麼)。但是,它不是多索引的。換句話說,我不能訪問df['f1']['B']
,因爲它返回錯誤KeyError: 'B'
。我正在尋找一種方法來實現這一點。可以通過在讀入循環後轉換結果df
,或者通過更改循環內的某些東西來完成。
最後,我還想將此數據框導出爲製表符分隔的文本文件。
您可以在'pd.concat'中使用'keys'參數。它會自動創建一個多重索引併爲其添加一個由傳遞的鍵組成的較高級別。 ('names'爲關卡添加名稱。)另外,您可能希望首先將'X'設置爲索引 - 無論是使用.set_index方法還是將'index_col'參數設置爲'pd.read_csv'。 – ptrj