не превращайте никого в пустой список панд - PullRequest
0 голосов
/ 06 октября 2019
import pandas as pd
Dates = [list(['None','11/04/1911', '03/06/1919']),
          list(['None']),
          list(['01/26/1912', '01/15/1918', '02/06/1917']),
          list(['None'])]
df= pd.DataFrame({'Text':['Hey 10.31.11  22|1|13 03-02-1919 d',
                              'things here 01-23-18 or 03-23-1984 then ',
                                  'stuff 1-22-12 01.11.18 or 2.2.17 so so ',
                          'nothing much'],
                          'ID': ['E1','E2', 'E3', 'E4'],
                  'Dates' : Dates,

                          })

, который выглядит как

                             Dates         ID   Text
0   [None, 11/04/1911, 03/06/1919]          E1  Hey 10.31.11 22|1|13 03-02-1919 d
1   [None]                                  E2  things here 01-23-18 or 03-23-1984 then
2   [01/26/1912, 01/15/1918, 02/06/1917]    E3  stuff 1-22-12 01.11.18 or 2.2.17 so so
3   [None]                                  E4  nothing much

У меня есть следующее df. Моя цель - заменить ['None'] например строку 1 и 3 на пустой список []. Мой желаемый вывод -

         Dates   ID Text  New_Date
0                         [None, 11/04/1911, 03/06/1919]           
1                         []                                       
2                         [01/26/1912, 01/15/1918, 02/06/1917]  
3                         []                                        

Я посмотрел Проверить None в пандах dataframe и Python: самый идиоматический способ преобразования None в пустую строку? и Как заменить None только пустой строкой, используя панд?

Я также пытался

df['New_Date] = df['Dates].replace('None', list())

Как мне добиться желаемого результата?

Ответы [ 2 ]

1 голос
/ 06 октября 2019

Используйте взорваться в пандах 0.25.1:

df['New_Date']=df['Dates'].explode().groupby(level=0).apply(lambda x: ','.join(x).split() if x.all() !='None' else [])

0          [None,11/04/1911,03/06/1919]
1                                    []
2    [01/26/1912,01/15/1918,02/06/1917]
3                                    []
Name: New_Date, dtype: object
1 голос
/ 06 октября 2019

вы можете попробовать код ниже, сначала он преобразует строки со списком, имеющим только строку None в None, а затем заменяет его пустым списком

cond = df.Dates.str.join(",") == "None"
df.Dates.loc[cond] = [[] for _ in range(sum(cond))]
df
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...