我编写了一个简单的脚本,它应该合并(联合)一些数据帧并删除重复的数据帧。
例如,对于输入:
df_A:
a 1
b 2
df_B:
b 2
c 3
预期产出将是:
df_out:
a 1
b 2
c 3
我编写了以下代码:
def read_dataframes(filenames, basedir):
return [pd.read_csv(basedir + file, sep='\t', header=None, quoting=csv.QUOTE_NONE) for file in filenames]
def merge_dataframes(dfs, out):
merged = pd.concat(dfs).drop_duplicates(subset=[0, 1]).reset_index(drop=True)
merged = merged.iloc[:, [0, 1, 2, 7, 8, 9]]
merged.to_csv(out, header=None, index=None, sep='\t')
我通过以下方式调用这些函数:
merge_dataframes(read_dataframes(filenames, basedir), output)
我得到一个例外的KeyError
:
Traceback (most recent call last):
File "analysis_and_visualization.py", line 70, in <module>
merge_dataframes(read_dataframes(wild_emb, wild_basedir), 'wild_emb_merged')
File "analysis_and_visualization.py", line 17, in merge_dataframes
merged = pd.concat(dfs).drop_duplicates(subset=[0, 1]).reset_index(drop=True)
File "/Data/user/eliran/.local/lib/python3.6/site-packages/pandas/core/frame.py", line 5112, in drop_duplicates
duplicated = self.duplicated(subset, keep=keep)
File "/Data/user/eliran/.local/lib/python3.6/site-packages/pandas/core/frame.py", line 5248, in duplicated
raise KeyError(diff)
KeyError: Int64Index([1], dtype='int64')
我做错了什么?
我认为这里的问题不是列1
,因为第一列被转换为index
,所以一些或所有DataFrames只有一列叫做0
。
为了防止它使用index_col=False
参数在read_csv
:
def read_dataframes(filenames, basedir):
return [pd.read_csv(basedir + file, sep='\t', header=None, quoting=csv.QUOTE_NONE, index_col=False) for file in filenames]
另一个问题是,由于某种原因,只有一列数据,因此称为2
的第二列不存在。
查看框架中的源代码。py
和功能重复
看起来数据框中的所有列都不存在。
# Verify all columns in subset exist in the queried dataframe
# Otherwise, raise a KeyError, same as if you try to __getitem__ with a
# key that doesn't exist.
diff = Index(subset).difference(self.columns)
if not diff.empty:
raise KeyError(diff)
df = pd.DataFrame({'col1' : [0,1,2], 'col3' : [1,2,3]})
print(df)
col1 col3
0 0 1
1 1 2
2 2 3
df.drop_duplicates(subset=['col1','col2'])
5246 diff = Index(subset).difference(self.columns)
5247 if not diff.empty:
-> 5248 raise KeyError(diff)
5249
5250 vals = (col.values for name, col in self.items() if name in subset)
KeyError: Index(['col2'], dtype='object')
熊猫的常见操作是 但是,如何在SQL中执行此操作?是否有标准的功能或方法来执行
有人可以解释为什么这段代码: 引发此错误: 我看到了这个答案,但我的专栏长度是相等的。
法典:- 错误 我试图在列和它们的前陈列室价格之间画一个箱线图。前展厅价格的值是分类的,因此,我首先将它们转换为整数,然后尝试绘制箱线图,但它会抛出错误,关键错误:“None of [Int64Index...] dtype='int64]在列中。
这是我的数据帧: 我试着用它做一个非常简单的情节: 但我一直收到一条关键错误消息: 我尝试将列[a]转换为日期时间,但仍然收到相同的错误消息。
有一个323列和10348行的数据帧。我想用下面的代码用分层k-Fold来划分它 但是我得到了以下错误 有人告诉我为什么会出现这个错误以及如何修复它吗
官方指南 我正在尝试使用官方的最新示例代码StratifiedKFold 我的代码 我将所有日期保存在两个数据帧X、y中,分别为整数值和浮点值 错误 我尝试过的解决方案 他在不同的位置有错误-键错误:无[Int64Index…]dtype='int64]在列中