Pandas dataframe возвращает значение None - PullRequest
0 голосов
/ 14 мая 2018

Я должен очистить данные CSV-файла.Данные, которые я пытаюсь очистить, приведены ниже.Условие: я должен добавить @ myclinic.com.au в конце каждой строки, где она отсутствует.

douglas@myclinic.com.au
mildura
broadford@myclinic.com.au
officer@myclinic.com.au
nowa nowa@myclinic.com.au
langsborough@myclinic.com.au
brisbane@myclinic.com.au
robertson@myclinic.com.au
logan village
ipswich@myclinic.com.au

Код для этого:

    DataFrame = pandas.read_csv(ClinicCSVFile)
    DataFrame['Email'] = DataFrame['Email'].apply(lambda x: x if '@' in str(x) else str(x)+'@myclinic.com.au')
    DataFrameToCSV = DataFrame.to_csv('Temporary.csv', index = False)   
    print(DataFrameToCSV)

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

TypeError: 'NoneType' object is not iterable

, который создается вышеупомянутым фреймом данных.Пожалуйста, помогите мне с этим.

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Использование apply и endswith

Пример:

import pandas as pd
df = pd.read_csv(filename, names=["Email"])
print(df["Email"].apply(lambda x: x if x.endswith("@myclinic.com.au") else x+"@myclinic.com.au"))

Выход:

0          douglas@myclinic.com.au
1          mildura@myclinic.com.au
2        broadford@myclinic.com.au
3          officer@myclinic.com.au
4        nowa nowa@myclinic.com.au
5     langsborough@myclinic.com.au
6         brisbane@myclinic.com.au
7        robertson@myclinic.com.au
8    logan village@myclinic.com.au
9          ipswich@myclinic.com.au
Name: Email, dtype: object
0 голосов
/ 14 мая 2018

Используйте endswith для условия с инвертированием на ~ и добавьте строку в конец:

df.loc[~df['Email'].str.endswith('@myclinic.com.au'), 'Email'] += '@myclinic.com.au'
#if need check only @
#df.loc[~df['Email'].str.contains('@'), 'Email'] += '@myclinic.com.au'
print (df)
                           Email
0        douglas@myclinic.com.au
1        mildura@myclinic.com.au
2      broadford@myclinic.com.au
3        officer@myclinic.com.au
4      nowa nowa@myclinic.com.au
5   langsborough@myclinic.com.au
6       brisbane@myclinic.com.au
7      robertson@myclinic.com.au
8  logan village@myclinic.com.au
9        ipswich@myclinic.com.au

Для меня это работает хорошо:

df = pd.DataFrame({'Email': ['douglas@myclinic.com.au', 'mildura', 'broadford@myclinic.com.au', 'officer@myclinic.com.au', 'nowa nowa@myclinic.com.au', 'langsborough@myclinic.com.au', 'brisbane@myclinic.com.au', 'robertson@myclinic.com.au', 'logan village', 'ipswich@myclinic.com.au']})
df.loc[~df['Email'].str.contains('@'), 'Email'] += '@myclinic.com.au'
print (df)
                           Email
0        douglas@myclinic.com.au
1        mildura@myclinic.com.au
2      broadford@myclinic.com.au
3        officer@myclinic.com.au
4      nowa nowa@myclinic.com.au
5   langsborough@myclinic.com.au
6       brisbane@myclinic.com.au
7      robertson@myclinic.com.au
8  logan village@myclinic.com.au
9        ipswich@myclinic.com.au
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...