用 .duplicated() 迭代地对熊猫块进行子集化给了我空数组
Posted
技术标签:
【中文标题】用 .duplicated() 迭代地对熊猫块进行子集化给了我空数组【英文标题】:Iteratively subsetting pandas chunks with .duplicated() gives me empty arrays 【发布时间】:2017-03-09 03:23:05 【问题描述】:我正在使用 Pandas 阅读大块的 csv。我对每个块进行子集化以查看是否有重复的时间戳:
for c in chunks:
dups= c.duplicated(subset='Timestamp')
dups= dups[dups==True]
print(dups)
当我打印副本时,我得到以下信息:
255 True
dtype: bool
Series([], dtype: bool)
2295 True
2687 True
dtype: bool
Series([], dtype: bool)
我明白为什么我得到条件为真的索引,但为什么是空的 Series 对象?
【问题讨论】:
您可以在问题中包含打印语句吗? 当然,很抱歉: 当然,对不起,我只是把上面的代码放到一个函数中: def is_duplicated(x): dups = c.duplicated(subset='Timestamp') dups = dups[dups ==True].index.tolist() print(dups) 那么,我的第一个问题的上面变成:for c in chunks: is_duplicated(c) 这给了我上面发布的输出:[62076, 62829 ] [] [65448, 65921] [] [67158] [68346, 68581, 68922] 同样,我不明白为什么我得到空数组;我猜它为每个块初始化一个数组,如果没有匹配,它根本不填充那个数组?
【参考方案1】:
在您的循环中,如果dups
全部为False
,dups= dups[dups==True]
行将返回一个空的Series
。如果您不想在它为空时打印它,您可以检查len(dups) > 0
:
for c in chunks:
dups= c.duplicated(subset='Timestamp')
dups= dups[dups==True]
if len(dups) > 0:
print(dups)
【讨论】:
以上是关于用 .duplicated() 迭代地对熊猫块进行子集化给了我空数组的主要内容,如果未能解决你的问题,请参考以下文章