Python 如何检查数据帧并返回包含特定字符串的列?
我有以下Python 如何检查数据帧并返回包含特定字符串的列?,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下df: 0 1 2 3 4 3 Services rendered 2000 HK$’000 HK$’000 5 Audit and audit related services 999 1,800 9,999 8 fina
df
:
0 1 2 3 4
3 Services rendered 2000 HK$’000 HK$’000
5 Audit and audit related services 999 1,800 9,999
8 financial statements HK$’000 788 600 1,233,456
我想捕获同时包含货币和财务编号的列,例如HK$'000
和1800
或600
- 在这种情况下,
和df[3]
是感兴趣的列,不是df[4]
或df[1]
df[2]
df[[3,4]]
,如下所示
3 4
3 HK$’000 HK$’000
5 1,800 9,999
8 600 1,233,456
我试过了
df_fin=df[df.apply(lambda x:x.str.contains('HK'))| df.apply(lambda x:x.str.contains('\d,?\d*))]
df_fin.iloc[:,df_fin.any().to_list()]
但它也捕获了df[1]
和df[2]
。我怎样才能得到想要的结果
谢谢。单向使用
pandas.DataFrame。将替换为pandas.Series.str.isnumeric
:
d = {"HK\$’": "1", ",": ""}
df = df.astype(str)
cols = []
for c in df:
if df[c].str.contains("HK\$’").any():
if df[c].replace(d, regex=True).str.isnumeric().all():
cols.append(c)
print(df[cols])
输出:
3 4
3 HK$’000 HK$’000
5 1,800 9,999
8 600 1,233,456
我们可以把它分解成几个步骤,让它更容易完成。这里的假设是,整个数据帧只是字符串:
创建正则表达式:
regex1 = "HK\$’\d+$"
regex2 = "^\d+[\d,]+$"
第一个正则表达式的筛选器:
df = df.loc[:, df.apply(lambda x: x.str.contains(regex1)).any()]
df
1 3 4
3 None HK$’000 HK$’000
5 None 1,800 9,999
8 HK$’000 600 1,233,456
现在,筛选第二个正则表达式:
df = df.loc[:, df.apply(lambda x: x.str.contains(regex2)).any()]
df
3 4
3 HK$’000 HK$’000
5 1,800 9,999
8 600 1,233,456
如果有一列仅为数字而没有货币,会发生什么情况。。?我需要他们两个在同一个专栏里解释更多?我看不出astype(str)
的基本原理,因为数据帧中的每个元素都是str
@chris\u 2020更新的。请让我知道它是否产生预期输出;)在第二个if
子句中,如果我使用df[c].str.contains(“\d\d*”).any()
,它是否相同?这听起来更像蟒蛇,如果是的话,我认为d
也是没有必要的。如果你想提前获得一个特定的列,为什么不干脆这样做呢。df=df[[3,4]]
@r-初学者,因为感兴趣的名称中的列不能保证。在实际任务中,您不知道这些列将位于何处,但您知道它们遵循一种模式。i、 e.它首先带有货币,其余行带有财务编号。