查看数据框:
import pandas as pd
import numpy as np
data=pd.DataFrame(['random 15 numbers 128 and 12 letters','12-5','page 65'],columns=['text'])
我想从字符串中提取所有数字并将最大数字写入新列。我用这段代码实现了这一点:
data['list']=data['text'].str.extractall('(\d+)').unstack().values.tolist()
data['max']=data['list'].apply(lambda row:max([int(x) for x in row if x is not np.nan]))
结果是这个数据框:
第一个问题:有没有更优雅的方法来做到这一点?
NaN
我的实际问题:只有当我的原始 DataFrame 中没有值时,我的代码才有效。在这种情况下,您将如何调整代码?结果应该是具有正确索引的NaN
每个值的一列。NaN
将定义行替换data
为以下内容以使问题出现:
data=pd.DataFrame(['random 15 numbers 128 and 12 letters','12-5','page 65',np.nan],columns=['text'])
另外,我想处理代码中的条目,这些条目不是NaN
没有数字的字符串。在这种情况下,中间列表应该为空,最后一行应该为空NaN
(这最后一件事很容易通过操作最后一行来实现)。
不要使用列表作为中间,直接使用
groupby.max
:输出:
如果您同时需要列表和最大值:
输出: