簡體   English   中英

通過在列表中的字符串 substring 中搜索數據來填充 pandas dataframe

[英]Populating pandas dataframe by searching data in substring of string in a list

假設一個字符串列表:

lst1 = ['A1 B1 C1', 'A2 B2 D1', 'S1 M1 A3', 'A4 B3 G1','H1 K1 W1']

我想通過在每個字符串中搜索特定值(如果可用)來創建一個表,然后填充 pandas dataframe。

像這樣:

         'A'     'B'     'C'      'D'
string1   A1      B1      C1      Nan
string2   A2      B2     Nan       D1
string3   A3      Nan    Nan      Nan
string4   A4      B3     Nan      Nan
string5   Nan     Nan    Nan      Nan

為了在每個字符串中進行搜索,我將它們中的每一個拆分為一個列表,使其成為一個嵌套列表,以便在每個字符串中運行一個 for 循環以進行搜索。 我的 RegEx 游戲不是太強,但我認為這可以通過對 RegEx 的良好處理來完成。

我當前的代碼:

import pandas as pd
lst1 = ['A1 B1 C1', 'A2 B2 D1', 'S1 M1 A3', 'A4 B3 G1','H1 K1 W1']
modlst1 = []
for each in lst1:
    modlst1.append(each.split())

rows = range(len(modlst1)) ### rows for each string
cols = ['A','B','C','D']   ### cols for each string
df = pd.DataFrame(index = rows, columns = cols)
df = df.fillna(0)

### Populating values
for each in rows:
    for stuff in modlst1[each]:
        if stuff.startswith('A'):
           df['A'] = stuff
        elif stuff.startswith('B'):
           df['B'] = stuff
        elif stuff.startswith('C'):
           df['C'] = stuff
        elif stuff.startswith('D'):
           df['D'] = stuff

我對 Python 很陌生,所以我仍在學習字符串操作以及搜索和查找。 我確信必須有更好的方法來做到這一點。 我的解決方案不起作用,因為當我嘗試將它們放入 dataframe 時,我的 dataframe 中不斷填充相同的值。 但是當我這樣做時:

        if stuff.startswith('A'):
           print(stuff)

循環運行良好,我得到不同的“A”、“B”、“C”、“D”值。 例如:(我不想要這個)

         'A'     'B'     'C'      'D'
string1   A1      B1      C1      Nan
string2   A1      B1      C1       D1
string3   A1      B1      C1       D1
string4   A1      B1      C1       D1
string5   A1      B1      C1       D1

這是一種方法:

import pandas as pd

lst1 = ['A1 B1 C1', 'A2 B2 D1', 'S1 M1 A3', 'A4 B3 G1','H1 K1 W1']

cols = ['A', 'B', 'C', 'D']   ### cols for each string
df = pd.DataFrame(columns=cols)

### Populating values
for elt in lst1:
    new = {}
    for sub_elt in elt.split(" "):
        if sub_elt[0] in cols:
            new[sub_elt[0]] = sub_elt
    df = df.append(pd.Series(new), ignore_index=True)

如果某些部分不清楚,請隨時詢問

暫無
暫無

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

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