2015-11-28 4 views
1

Я пробовал несколько вещей и просто не могу получить что-то, что работает. В основном у меня есть файл XLSX, который имеет 3 столбца (имя, адрес электронной почты, номер телефона), а затем несколько строк. Телефонные номера начинаются с разных кодов стран «+ 1.xxxxxxxxxx» «+ 90.xxxxxxxxxx» «+34». и т. д. Первое, что я хочу сделать, это удалить все строки, которые не начинаются с «+1». и хотел бы дополнительно фильтровать, удаляя, очевидно, поддельный и/или неполный номер телефона, например, иногда люди используют «+1.5555555555» или не дают мне полные номера, поэтому я бы получил «+1.12345678» (не полный 10-значный номер число, 13, если вы считаете '+1.'). Затем, после всего этого, напишите его в .csv.Удалить строки, не содержащие значения в pandas

Мой код до сих пор выглядит следующим образом:

import pandas as pd 

xl_file = pd.ExcelFile('testexcel.xlsx') 
df = xl_file.parse('Sheet 1', index_col='Name', na_values=['NA']) 
#df.drop(df.columns[[0]], axis=1, inplace=True) 
df = df[df['Phone'] != '+1.*'] 
df.to_csv('testingpandas.csv') 

# df.drop ... компонент был только я играл с df.dop и удаление столбцов в целом. Следующая строка - моя попытка использовать this answer, чтобы получить результат, который я хотел, но я просто не могу найти то, что правильно. И «*» в конце было тем, что я считал шаблоном.

Было бы лучше отфильтровать «+ 1», а затем написать что-то, что затем удаляет строки без общего количества строк 13 в этом столбце?

ответ

1

Вы можете использовать индексацию pandas, чтобы отфильтровать строки или написать пользовательскую функцию.

Ради примера я покажу 2 пути, сохраняя только те строки, которые начинаются с +1 и длиной 13.

pandas индексирование:

df = df[(df['Phone'].str.startswith('+1')) & (df['Phone'].str.len() == 13)] 

Другой способ, обычай метод:

def filter_by_beginning_and_len(phone): 
    return str(phone).startswith('+1') and len(str(phone)) == 13 

df = df[df['Phone'].apply(filter_by_beginning_and_len)] 
+0

Я пробовал оба, и они оба ошибаются. Верхняя часть кажется отсутствующей «)», а также «]». Я думаю, что я забрал их в нужное место, но затем, когда он запускается, он просто возвращает пустой документ только с заголовком (имя, адрес электронной почты, телефон). Для подтверждения, вот код: ** df = df [(df ['Phone']. Str.startswith ('+ 1') & (df ['Phone']). Str.len() == 13)] ** Я добавил ']' после & df ['Phone' par, и ')' после 13 в конце, но до закрытия]. Просто хочу убедиться, что это правильно. – Mxracer888

+0

Другой ошибочно говорит: «Ошибка имени: глобальное имя« x »не определено. К сожалению, я не знаю, как это исправить. Извините, я до сих пор довольно новичок в этом:/ – Mxracer888

+0

Извините, у меня действительно были некоторые синтаксические ошибки.Я исправил оба моих примера, поэтому, пожалуйста, попробуйте их снова. Если вы все еще получаете пустой фреймворк, это означает, что, по-видимому, ни одна строка не имела значения в столбце «Телефон», который начинается с '+ 1' и имеет длину 13 символов (включая '+ 1' и' .'). – DeepSpace

Смежные вопросы