Lin*_*Guo 2 python python-2.7 pandas
我有许多文本文件,其中包含文本和数字条目.更具体地说,所有这些文件的前两行和第一列是文本,所有其他条目由数字组成.例如,让我们考虑三种单独的文本文件(文件A,B和C),格式如下所示.
文件A:
Type A1 A2 A3 A4 A5
Tag TagA1 TagA1 TagA1 TagA2 TagA2
object1 1.1 2.1 3.1 4.1 5.1
object2 1.2 2.2 3.2 4.2 5.2
object4 1.4 2.4 3.4 4.4 5.4
object7 1.7 2.7 3.7 4.7 5.7
object8 1.8 2.8 3.8 4.8 5.8
object9 1.9 2.9 3.9 4.9 5.9
Run Code Online (Sandbox Code Playgroud)
档案B:
Type B1 B2
Tag TagB1 TagB2
object1 11.1 12.1
object3 11.3 12.3
object4 11.4 12.4
object5 11.5 12.5
object7 11.7 12.7
object9 11.9 12.9
Run Code Online (Sandbox Code Playgroud)
文件C:
Type C1 C2 C3 C4
Tag TagC1 TagC1 TagC2 TagC2
object1 21.1 22.1 23.1 24.1
object4 21.4 22.4 23.4 24.4
object5 21.5 22.5 23.5 24.5
object6 21.6 22.6 23.6 24.6
object7 21.7 22.7 23.7 24.7
object9 21.9 22.9 23.9 24.9
Run Code Online (Sandbox Code Playgroud)
我想使用python创建一个单独的文本文件,其中只包含那些行(从第3行开始),这些行存在于所有这三个文件中(即行的交集).这个最终的文本文件应该保留所有这三个文件的相关列.以下是我想要的最终文件:
Type A1 A2 A3 A4 A5 B1 B2 C1 C2 C3 C4
Tag TagA1 TagA1 TagA1 TagA2 TagA2 TagB1 TagB2 TagC1 TagC1 TagC2 TagC2
object1 1.1 2.1 3.1 4.1 5.1 11.1 12.1 21.1 22.1 23.1 24.1
object4 1.4 2.4 3.4 4.4 5.4 11.4 12.4 21.4 22.4 23.4 24.4
object7 1.7 2.7 3.7 4.7 5.7 11.7 12.7 21.7 22.7 23.7 24.7
object9 1.9 2.9 3.9 4.9 5.9 11.9 12.9 21.9 22.9 23.9 24.9
Run Code Online (Sandbox Code Playgroud)
我意识到我可以使用pandas使用如下命令导入每个提到的文本文件:
df = pd.read_csv('filename.txt',sep='\t', header=[0,1], index_col=0)
Run Code Online (Sandbox Code Playgroud)
一旦我有文件A,B和C,我如何使用python制作这个最终文件?我想用python 2.7.
使用pd.merge()-
from functools import reduce
dfs = [df1, df2, df3]
df_final = reduce(lambda left,right: pd.merge(left,right,on=None,left_index=True,right_index=True), dfs)
Run Code Online (Sandbox Code Playgroud)
要么
df1.join(df2, how='inner').join(df3, how='inner')
Run Code Online (Sandbox Code Playgroud)
这些通过键为您提供了一种万无一失的加入方式 -
Type A1 A2 A3 A4 A5 B1 B2 C1 C2 C3 C4
Tag TagA1 TagA1 TagA1 TagA2 TagA2 TagB1 TagB2 TagC1 TagC1 TagC2 TagC2
object1 1.1 2.1 3.1 4.1 5.1 11.1 12.1 21.1 22.1 23.1 24.1
object4 1.4 2.4 3.4 4.4 5.4 11.4 12.4 21.4 22.4 23.4 24.4
object7 1.7 2.7 3.7 4.7 5.7 11.7 12.7 21.7 22.7 23.7 24.7
object9 1.9 2.9 3.9 4.9 5.9 11.9 12.9 21.9 22.9 23.9 24.9
Run Code Online (Sandbox Code Playgroud)
计时
@暗
2.63 ms ± 598 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Run Code Online (Sandbox Code Playgroud)
@Vivek
2.9 ms ± 252 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Run Code Online (Sandbox Code Playgroud)
@Vivek(第二名 - 使用加入)
5.4 ms ± 662 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Run Code Online (Sandbox Code Playgroud)
由于按键没有麻烦,@ Dark的解决方案效率稍高.但是由于提到的OP 只包含那些存在于所有这三个文件中的行(从第3行开始),所以我merge顺便说一句,而不是那种concat方式