簡體   English   中英

Python Pandas過濾並創建新的數據框

[英]Python Pandas filtering and creating new dataframe

我正在為那些在一列中包含關鍵字的記錄過濾列表。 總體列表輸出如下:

outputs = 
sent_name   Name    Lat Lng type
    Abbey Road Station, London, UK  Abbey Road, London E15, UK  51.53193    0.00376 [u'transit_station', u'point_of_interest', u'establishment']
    Abbey Wood Station, London, UK  Abbey Wood, London SE2, UK  51.49106    0.12142 [u'transit_station', u'point_of_interest', u'establishment']

我在輸出[3]中搜索字符串“ station”,然后將結果為true的結果附加到一個空列表中。 按照 -

results = []

for output in outputs:
    if "station" in output[3]:
        results.append(output)

我希望將Pandas用於以后的分析,但不知道如何在過濾這些結果后重新創建DataFrame。

OD = pd.read_csv('./results.csv', header=0)

在哪里,results.csv再次是:

sent_name   Name    Lat Lng type
Abbey Road Station, London, UK  Abbey Road, London E15, UK  51.53193    0.00376 [u'transit_station', u'point_of_interest', u'establishment']
Abbey Wood Station, London, UK  Abbey Wood, London SE2, UK  51.49106    0.12142 [u'transit_station', u'point_of_interest', u'establishment']

使用迭代,我可以遍歷pandas數據框中的行,並過濾掉type列中存在“ station”的行。

    for index, row in OD.iterrows():
        if "station" in row['type']:

但是,我無法由此創建新的DataFrame。 我的最終目標是使用Pandas中的.to_csv函數創建一個新的csv(僅包含在type列中具有“ station”特征的記錄)。

我試圖用適當的索引名創建一個新的數據框。 然后如上進行過濾,並嘗試將這些結果附加到新的數據框中

OD_filtered = pd.DataFrame(index=['sent_name','Name','Lat', 'Lng', 'type'])

for index, row in OD.iterrows():
    if "station" in row['type']:
        OD_filtered.append([row['sent_name'], row['Name'], row['Lat'], row['Lng'], row['type']])

pprint(OD_filtered)

但是,這無法寫入數據幀,並且保持為空。 當我打印(OD_filtered)它給出:

Empty DataFrame
Columns: []
Index: [sent_name, Name, Lat, Lng, type]

你可以通過調用創建一個布爾面膜apply在“類型”一欄,以建立新的DF:

In [37]:
import io
import pandas as pd
t="""sent_name;Name;Lat;Lng;type
Abbey Road Station, London, UK;Abbey Road, London E15, UK;51.53193;0.00376;[u'transit_station', u'point_of_interest', u'establishment']
Abbey Wood Station, London, UK;Abbey Wood, London SE2, UK;51.49106;0.12142;[u'transit_station', u'point_of_interest', u'establishment']"""
df = pd.read_csv(io.StringIO(t), sep=';')
df

Out[37]:
                        sent_name                        Name       Lat  \
0  Abbey Road Station, London, UK  Abbey Road, London E15, UK  51.53193   
1  Abbey Wood Station, London, UK  Abbey Wood, London SE2, UK  51.49106   

       Lng                                               type  
0  0.00376  [u'transit_station', u'point_of_interest', u'e...  
1  0.12142  [u'transit_station', u'point_of_interest', u'e...  

In [39]:    
# filter the df
df[df['type'].apply(lambda x: 'station' in x)]

Out[39]:
                        sent_name                        Name       Lat  \
0  Abbey Road Station, London, UK  Abbey Road, London E15, UK  51.53193   
1  Abbey Wood Station, London, UK  Abbey Wood, London SE2, UK  51.49106   

       Lng                                               type  
0  0.00376  [u'transit_station', u'point_of_interest', u'e...  
1  0.12142  [u'transit_station', u'point_of_interest', u'e...  

因此,在您的情況下,以下方法應該起作用:

new_df = OD[OD['type'].apply(lambda x: 'station' in x)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM