如何使用掩码条件合并pandas/python中的三个不同数据帧?
我试图合并三个不同的大数据帧(1400000行),两个数据帧是正常的,第三个数据帧来自这个如何使用掩码条件合并pandas/python中的三个不同数据帧?,python,pandas,dataframe,Python,Pandas,Dataframe,我试图合并三个不同的大数据帧(1400000行),两个数据帧是正常的,第三个数据帧来自这个mask=(df['a'].lt(25)&df['a'].gt(10))| df['b'].gt(0.2)| df['c'].gt(500) df[mask]&df['e'].eq(0)`,根据我下面的样本数据 a b c dt e h i j k 35 0.1 234 2020/6/15 14:27:00
mask=(df['a'].lt(25)&df['a'].gt(10))| df['b'].gt(0.2)| df['c'].gt(500)
df[mask]&df['e'].eq(0)`,根据我下面的样本数据
a b c dt e h i j k
35 0.1 234 2020/6/15 14:27:00 0 ........
1 0.1 554 2020/6/15 15:28:00 1 ........
2 0.2 654 2020/6/15 16:29:00 0 ........
23 0.4 2345 2020/6/15 17:26:00 0 ........
34 0.8 245 2020/6/15 18:25:00 0 ........
8 0.9 123 2020/6/15 18:26:00 0
7 0.1 22 2020/6/15 18:27:00 0
2 0.3 99 2020/6/15 18:28:00 0
219 0.2 17 2020/6/15 19:26:00 0
下面的代码将得到许多无用和重复的列,有没有办法合并三个不同的大数据
import pandas as pd
from functools import reduce
df1 = pd.read_csv('test1.csv')
df2 = pd.read_csv('test2.csv')
df = pd.read_csv('test.csv', usecols = ['a', 'b', 'c', 'dt', 'e'])
mask = (df['a'].lt(25) & df['a'].gt(10)) | df['b'].gt(0.2) | df['c'].gt(500)
df['x'] = mask.astype(int)
dfs = [df1, df2, df]
df_full = reduce(lambda left,right: pd.merge(left,right, on=['id']), dfs)
你能添加一些关于数据帧的信息吗?它们有相同的列吗?还是每个框架都有不同的列和不同的行数?我不是问数据本身,而是问它的结构 此外,我对此也不太确定,但请尝试在要从第三个数据帧读取的列中包含
'id'
,因为看起来您正在尝试合并该索引上的所有三个数据帧
usecols = ['id', 'a', 'b', 'c', 'dt', 'e']
(编辑:我尝试在没有该“id”的情况下进行合并,但对我无效。)
我尝试使用自己的CSV文件:
- test1.csv有一些列(id、a、b、c)
- test2.csv有不同的列(id、d、e、f)
- test3.csv的列与问题中的列相同:(id、a、b、c、dt、, (e)
df1、df2
没有样本数据。另外,如果问题是会导致许多无用的重复列
是否可以使用usecols
过滤不必要的列,例如f1=pd.read\u csv('test1.csv',usecols=['need col1','need col2'])
?@jezrael您知道如何合并三个数据帧吗?如果是,你不需要我的df1和df2的样本数据。你的合并代码很好,所以去问吧。代码引用了这个链接,是的,代码很好,问题是数据中是否会有很多无用的重复列
df1和df2有很多重复列,以及如何删除df1和df2的列?你可以使用df1=pd.read\u csv('test1.csv',delimiter=“;”,usecols=[…])
和df2=pd.read\u csv('test1.csv',delimiter=“;”,usecols=[…])
因此您只读取要合并的列(同时确保在两个列表中都包含'id'
)
import pandas as pd
df1 = pd.read_csv('test1.csv', delimiter=";")
df2 = pd.read_csv('test2.csv', delimiter=";")
df = pd.read_csv('test3.csv', delimiter=";", usecols = ['id', 'a', 'b', 'c', 'dt', 'e'])
mask = (df['a'].gt(10) & df['a'].lt(25)) | df['b'].gt(0.2) | df['c'].gt(500)
df['x'] = mask.astype(int)
dfs = [df1, df2, df]
df_merged = df1.merge(df2, on=['id'])
df_merged = df_merged.merge(df, on=['id'])