Проблема с удалением \ n из pandas фрейма данных - PullRequest
2 голосов
/ 26 января 2020

Я пытаюсь избавиться от всех \ n из целого pandas кадра данных. Я знаю, что уже есть ответы на этот вопрос о переполнении стека, но по некоторым причинам я не могу получить желаемый результат. У меня есть следующий фрейм данных:

  title     text    date    authors
0   [ECB completes foreign reserves investment in ...   [\nThe European Central Bank (ECB) completed an ...     [13 June 2017]  ECB
1   [Measures to improve the efficiency of the ope...   [\nThe Governing Council of the ECB has decided ...     [\n 23 January 2003 \n ]    ECB
2   []  []  []  ECB
3   [ECB publishes the results of the Euro Money M...   [Today the European Central Bank (ECB) is publ...   [\n 28 September 2012 \n ]  ECB
4   []  []  []  ECB

Это мой желаемый вывод:

title   text    date    authors
0   [ECB completes foreign reserves investment in...    [The European Central Bank (ECB) completed an ...   [13 June 2017]  ECB
1   [Measures to improve the efficiency of the ope...   [The Governing Council of the ECB has decided ...   [23 January 2003]   ECB
2   []  []  []  ECB
3   [ECB publishes the results of the Euro Money M...   [Today the European Central Bank (ECB) is publ...   [28 September 2012]     ECB
4   []  []  []  ECB 

Это все коды, которые я пробовал:

  1. на основе на это переполнение стека сообщение, которое я пробовал:

    mydf=df.replace({r'\\n': ''}, regex=True)
    
    mydf=df['date'].str.strip(r'\\n') #this turns every obs into NaN 
    
    mydf=df.replace(to_replace=[r"\\n", "\n"], value=["",""], regex=True, inplace =True) #this gets rid of all data in dataframe for some reason
    

ни то, ни другое не сработало

на основе этого сообщения Я пытался (заметьте, я пропускаю ответы, которые уже пробовали ранее):

mydf=df.replace(r'\s', '', regex = True, inplace = True) #this deleted all data

основан на этот пост я пробовал:

mydf=df.replace('\\n',' ')

на основе комментариев для этот пост я пытался :

mydf=df['date'].replace(r'\s+|\\n', ' ', regex=True, inplace=True) и

mydf=df.replace(r'\s+|\\n', ' ', regex=True, inplace=True)

на основе ответов в этом посте Я пытался:

mydf= df.replace({r'\s+$': '', r'^\s+': ''}, regex=True).replace(r'\n', ' ', regex=True)

mydf=df.replace({ r'\A\s+|\s+\Z': '', '\n' : ' '}, regex=True, inplace=True) # this again deleted whole df

Я не понимаю, почему найденные ответы не работают в моем случае, так как они были приняты и большинство из этих вопросов похоже очень похожи на мои.

Ответы [ 2 ]

1 голос
/ 26 января 2020

Попробуйте:

df['date']=df['date'].str[0].str.replace(r"\n", "")

То есть предполагается, что каждая ячейка в столбце date представляет собой список только с 1 элементом. Это также сгладит его - поэтому вы получите строку из этого единственного элемента.

ЕСЛИ однако date может содержать более одного элемента, и вы хотите объединить их все в одну строку после того, как избавитесь от всех \n - попробуйте

df['date']=df['date'].str.join('').str.replace(r"\n", "")

В противном случае, если вы хотите sh сохранить его в формате списка, просто удалите все элементы из \n try (&& является промежуточным разделителем):

df['date']=df['date'].str.join(r'&&').str.replace(r"\n", "").str.split(r'&&')
1 голос
/ 26 января 2020
d = {'col1': [['\n a b c'], ['\n x y z']], 'col2': [[1.5000], ['\n x y z']]}
df20 = pd.DataFrame(data=d)

print(df20)

def remove_spec_char(string_list=list):
    y = []
    for string_x in string_list:
        if type(string_x) == str:
            y.append(string_x.replace('\n', ''))
        else:
            y.append(string_x)
    return y



for c in df20.columns:

    df20[c] = df20[c].apply(remove_spec_char)

print(df20)
...