我正在使用 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、其他字符串等任何内容,因此仅过滤掉空字符串并不能解决问题。
非常感谢您的帮助!
不要使用显式循环,而是利用 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)