在Python中,我尝试从Pandas数据框中提取单个值。我确切知道值包含的内容,我只需要在数据框中的任何位置找到它并将其提取即可。

例如,在下面的数据框中:

df = pd.DataFrame(
        {0: ['BA1234', 'CA:1234', 'DA','DA1234', 'EX DA', 'CA1234'],
         1: ['BA1234', 'CA:1234', 'DA','CA1234', 'EX DA', 'CA1234'],
         2: ['BA1234', 'CA:1234', 'DA','CA1234', 'EX DA', 'CA1234']})


我想提取包含两个字母“ DA”并紧随其后的4位数字的字符串。

我一直在尝试使用面具:

mask = pd.DataFrame(np.column_stack([df[col].str.contains('^DA\d{4}', na = False) for col in df]))


哪个似乎有效:

da_value = df[mask]

da_value
        0    1    2
0     NaN  NaN  NaN
1     NaN  NaN  NaN
2     NaN  NaN  NaN
3  DA1234  NaN  NaN
4     NaN  NaN  NaN
5     NaN  NaN  NaN


但是,如何从数据框中提取值?有更好/更容易的方法吗?

编辑:我真正想要的输出是

da_value = 'DA1234'

最佳答案

首先将DataFrame.stack用于Series,然后使用boolean indexingSeries.str.contains进行过滤:

s = df.stack()
a = s[s.str.contains(r'^DA\d{4}', na=False)].tolist()


如果需要列表中的第一个值,则可以选择:

print (a[0])
DA1234


或一般解决方案(如果可能)不存在任何值,则添加默认值:

print (next(iter(a), 'no match'))
DA1234

关于python - 从 Pandas 数据框中提取单个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56187039/

10-12 20:13