如何调用多个结构包含在同一列中取出Pandas的数据

2024-05-17 01:13:06 发布

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

我创建了一个这样的示例:

appart = OrderedDict([ ('Description', ['A LOUER F2 GRENOBLE Quartier Île Verte Rue Eugène Delacroix, place Dr Girard, proche tramway B et ligne de bus, 50,60 m² 4 ème étage avec ascenseur.', 'Actuellement libre.Transport : Ligne de bus C6 desservant le centre ville toutes les 10 mintram A arrêt Mc2Le stationnement.', ' Idéalement située: -à deux pas du Tram (Arrêt Gustave RIvet)-à 10 minutes du Centre Ville -supermarché à 2']),
      ('Loyer', [350, 267, 150]),
      ('Type',  ['Appartement', 'Maison', 'Parking']),
      ('Surface', [25, 18, 15]) ] )
df1 = pd.DataFrame.from_dict(appart)
df1

这是我的输出:

^{pr2}$

所以对于这个DataFrame,我想从每个描述中取出这个区域,并将它添加到一个名为Quartier的新列中。例如,如果第一个描述包含('victor hugo|centre ville|hyper-centre-ville'),那么在Quartier列中添加'Centre Ville',如果第二个描述包含(''ile verte|Île-verte|ile-verte|la tronche'),则在Quartier列中添加{},依此类推。在


Tags: le示例dataframededf1dubuscentre
1条回答
网友
1楼 · 发布于 2024-05-17 01:13:06

我使用df['Description'].apply(callback)对每一行执行函数并返回新值,这将创建新列。在

import pandas as pd
import re

appart = {
    'Description': [
        'A LOUER F2 GRENOBLE Quartier Île Verte Rue Eugène Delacroix, place Dr Girard, proche tramway B et ligne de bus, 50,60 m² 4 ème étage avec ascenseur.',
        'Actuellement libre.Transport : Ligne de bus C6 desservant le centre ville toutes les 10 mintram A arrêt Mc2Le stationnement.',
        ' Idéalement située: -à deux pas du Tram (Arrêt Gustave RIvet)-à 10 minutes du Centre Ville -supermarché à 2'
    ],
    'Loyer': [350, 267, 150],
    'Type': ['Appartement', 'Maison', 'Parking'],
    'Surface': [25, 18, 15]
}

df = pd.DataFrame(appart)
print(df)

#   

def callback(text):
    if re.search('Victor Hugo|victor hugo|Centre-ville|centre ville|hyper-centre-ville|gare|grenette|saint André', text, re.IGNORECASE):
        return 'Centre-ville'

    if re.search('ile verte|Île-verte|ile-verte|la tronche|trois tours|île verte', text, re.IGNORECASE):
        return 'Île-Verte'

    return ''

df['Quartier'] = df['Description'].apply(callback)
print(df)

编辑:我认为您可以将第一个np.where()嵌套在第二个np.where()中作为第三个参数。在

^{pr2}$

但我知道结果是否正确。在

df['Quartier_2'] = np.where(df['Description'].str.contains('Victor Hugo|victor hugo|\
Centre-ville|centre ville|hyper-centre-ville|gare|grenette|\
saint André', case=False, na=True), 'Centre-ville',
    np.where(df['Description'].str.contains('ile verte|Île-verte|ile-verte|la tronche|trois tours|île verte', case=False, na=True), 'Île-Verte', ''))

print(df)  

我将apply()用于一个列,但您可以将其用于多个列或完整的数据帧,然后您必须使用axis=1来获取行而不是列。在函数内部,您可以从不同的列中获取值。在

def callback(row):

    text = row['Description']

    if re.search('Victor Hugo|victor hugo|Centre-ville|centre ville|hyper-centre-ville|gare|grenette|saint André', text, re.IGNORECASE):
        return 'Centre-ville'

    if re.search('ile verte|Île-verte|ile-verte|la tronche|trois tours|île verte', text, re.IGNORECASE):
        return 'Île-Verte'

    return ''

df['Quartier'] = df.apply(callback, axis=1)

相关问题 更多 >