连接两个具有不同行数的 CSV 返回警告
Concat two CSVs with different number of rows returning warning
我需要连接两个行数不同的 CSV。当我这样做时,我会收到一条警告,当我通过目视检查知道有匹配的行时,print(df1.head())
return 中的结果是一个空数据框。
警告是否会影响 head() 中反映的结果?还是我需要解决其他问题?
# columns to filter on
columns_to_match = ['column1', 'column2', 'column3', 'column4', 'column5']
# find matching rows based off columns in filter
filter = df1[columns_to_match].eq(df2[columns_to_match]).all(axis=1)
# concat filtered results
df1 = pd.concat([df1[columns_to_match], df2[columns_to_match]])
# print matching results
print(df1.head())
我收到以下错误:
UserWarning: Boolean Series key will be reindexed to match DataFrame index.
df1 = pd.concat([df1[filter], df2[filter]])
谢谢。
首先,filter
有多种用途,这很令人困惑 error-prone。我认为出现警告是因为 filter = df1[filter].eq(df2[filter]).all(axis=1)
是与 df1
对齐的系列。但是,您随后尝试使用相同的掩码系列对 df2
进行子集化。
解决它的一种方法是使用例如filter2 = df2[cols].eq(df1[cols]).all(axis=1)
然后做
df1 = pd.concat([df1[filter], df2[filter2]])
(注意我在这里定义的是cols = ['column1', 'column2', 'column3', 'column4', 'column5']
。
编辑 - 这应该有效:
# find matching rows based off columns in filter
filter1 = df1[columns_to_match].eq(df2[columns_to_match]).all(axis=1)
filter2 = df2[columns_to_match].eq(df1[columns_to_match]).all(axis=1)
# concat filtered results
df1 = pd.concat([df1[filter1], df2[filter2]])
感谢 @ags29 and @not_speshal。你的两个建议让我找到了这个解决方案。
# columns to filter on
columns_to_match = ['column1', 'column2', 'column3', 'column4', 'column5']
# merge filtered results)
df1 = pd.merge(df1, df2, on=columns_to_match)
print(df1.head())
我需要连接两个行数不同的 CSV。当我这样做时,我会收到一条警告,当我通过目视检查知道有匹配的行时,print(df1.head())
return 中的结果是一个空数据框。
警告是否会影响 head() 中反映的结果?还是我需要解决其他问题?
# columns to filter on
columns_to_match = ['column1', 'column2', 'column3', 'column4', 'column5']
# find matching rows based off columns in filter
filter = df1[columns_to_match].eq(df2[columns_to_match]).all(axis=1)
# concat filtered results
df1 = pd.concat([df1[columns_to_match], df2[columns_to_match]])
# print matching results
print(df1.head())
我收到以下错误:
UserWarning: Boolean Series key will be reindexed to match DataFrame index.
df1 = pd.concat([df1[filter], df2[filter]])
谢谢。
首先,filter
有多种用途,这很令人困惑 error-prone。我认为出现警告是因为 filter = df1[filter].eq(df2[filter]).all(axis=1)
是与 df1
对齐的系列。但是,您随后尝试使用相同的掩码系列对 df2
进行子集化。
解决它的一种方法是使用例如filter2 = df2[cols].eq(df1[cols]).all(axis=1)
然后做
df1 = pd.concat([df1[filter], df2[filter2]])
(注意我在这里定义的是cols = ['column1', 'column2', 'column3', 'column4', 'column5']
。
编辑 - 这应该有效:
# find matching rows based off columns in filter
filter1 = df1[columns_to_match].eq(df2[columns_to_match]).all(axis=1)
filter2 = df2[columns_to_match].eq(df1[columns_to_match]).all(axis=1)
# concat filtered results
df1 = pd.concat([df1[filter1], df2[filter2]])
感谢 @ags29 and @not_speshal。你的两个建议让我找到了这个解决方案。
# columns to filter on
columns_to_match = ['column1', 'column2', 'column3', 'column4', 'column5']
# merge filtered results)
df1 = pd.merge(df1, df2, on=columns_to_match)
print(df1.head())