返回在panda datafram的每行中包含子字符串的第一个值

2024-04-18 20:47:37 发布

您现在位置:Python中文网/ 问答频道 /正文

list = [['apple', 'orange', 'pear'],  ['peach', 'apple', 'pear']]
df = pd.DataFrame(list)
print df

Out[172]: 
       0       1     2
0  apple  orange  pear
1  peach   apple  pear

我正在尝试为df的每一行获取子字符串“pe”的第一个匹配项。基本上,我希望输出是一个数据帧,它提供:

       0
0  pear
1  peach

请提供一个可行的解决方案。你知道吗


Tags: 数据字符串appledataframedf解决方案outlist
0条回答
网友
1楼 · 发布于 2024-04-18 20:47:37

暴力方法:

In [22]: df
Out[22]:
       0       1     2
0  apple  orange  pear
1  peach   apple  pear

In [23]: def startswith(prefix, default=''):
    ...:     def f(S):
    ...:         for val in S:
    ...:             if val.startswith(prefix):
    ...:                 return val
    ...:         return default
    ...:     return f
    ...:

In [24]: df.apply(startswith('pe'), axis=1)
Out[24]:
0     pear
1    peach
dtype: object

注意,这是没有效率的。它本质上是一个庞大的、嵌套的python for循环。如果您有一堆字符串,那么数据帧就不是正确的数据结构。你知道吗

注意,df.apply采用一个函数,该函数将应用于每一列(如果传递axis=0,则为默认值)或每一行(如果传递axis=1)。你知道吗

startswith函数是一个函数工厂,因此您可以向它传递一个要搜索的前缀,以及一个默认值,如果它从未找到匹配项(您可以将其设置为任何您想要的值),它将返回一个新函数,该函数搜索给定这些约束的行。你知道吗

网友
2楼 · 发布于 2024-04-18 20:47:37

我的解决方法和@胡安帕.阿里维拉加. 只要您希望多维列表输入相对较小,那么这个嵌套循环就可以正常工作。你知道吗

循环遍历多维数组(在将其放入数据帧之前),然后在该列表中搜索以“pe”开头的字符串的第一个匹配项(或您正在搜索的任何字符串)。将该字符串作为一项列表插入结果列表。填充该列表后,再次将其放入数据帧中。你知道吗

myList=[['apple'、'orange'、'pear']、['peach'、'apple'、'pear']] 结果列表=[]

for row in myList:
    for fruit in  row:
        if fruit.startswith('pe'):
            resultList.append([fruit])
            break

df2 = pd.DataFrame(resultList)
printdf

相关问题 更多 >