从 Pandas 中具有不同行索引的列中获取特定值

问题描述 投票:0回答:1

我正在使用 Pandas 处理大量 Excel 文件,我需要从列中提取某些值。列(行)内的位置可能会有所不同,但列的名称在整个文件中保持不变,所需值的开头始终以“K_”开头。

我能想到的唯一方法是迭代文件,创建数据帧,获取每列的唯一值,然后使用 if 语句获取以“K_”开头的值。

该解决方案工作正常,但我确信有一种更简单、更优雅的方法来实现相同的结果。

这是我的问题的一个简短的工作示例:

import pandas as pd

file1 = {'Col1' : ['', '', 'K_ABC', '', '', '']}
file2 = {'Col1' : ['', 'K_DEF', '', '', '', '']}
file3 = {'Col1' : ['', '', '', 'K_GHI', '', '']}

files = [file1, file2, file3]

for foo in files:
    df = pd.DataFrame(foo)
    values = df['Col1'].unique()
    for val in values:
        if val.startswith('K_'):
            print(val)

其他行可以是空字符串、NaN、其他字符串等任何内容,因此仅过滤掉空字符串并不能解决问题。

非常感谢您的帮助!

python pandas
1个回答
0
投票

不要使用显式循环,而是利用 pandas 的矢量化(参见 https://pandas.pydata.org/docs/user_guide/dsintro.html#vectorized-operations-and-label-alignment-with-series) :

for foo in files:
    df = pd.DataFrame(foo)
    vals = df[df['Col1'].str.startswith('K_')]['Col1'].unique()
    print(vals)
© www.soinside.com 2019 - 2024. All rights reserved.