用 .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 全部为Falsedups= 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() 迭代地对熊猫块进行子集化给了我空数组的主要内容,如果未能解决你的问题,请参考以下文章

如何有效地对抽象列表进行嵌套迭代?

用熊猫为excel中的单元格着色

如何使函数在熊猫中对行进行迭代?

是否可以用熊猫逐块写入json

类型函数的熊猫过滤参数不可迭代[重复]

追溯性地对应用程序进行版本控制