Удалить строки, не содержащие значения в пандах
Я попробовал несколько вещей и просто не могу получить что-то, что работает. В основном у меня есть файл XLSX, который имеет 3 столбца (имя, адрес электронной почты, номер телефона), а затем количество строк. Номера телефонов начинаются с разных кодов стран: "+1.xxxxxxxxxx", "+90.xxxxxxxxxx", "+34". и т.д. Первое, что я хочу сделать, это удалить все строки, которые не начинаются с "+1". и хотел бы дополнительно отфильтровать, удалив заведомо поддельный и / или неполный номер телефона, например, иногда люди используют "+1.5555555555" или не дают мне полные номера, поэтому я получаю "+1.12345678" (не полные 10 цифр) число 13, если считать "+1."). Затем, после того, как все это будет сделано, запишите его в.csv.
Мой код до сих пор выглядит следующим образом:
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 и удаляющим столбцы в целом. Следующая строка - моя попытка использовать этот ответ, чтобы, возможно, получить желаемый результат, но я просто не могу понять, что правильно. И "*" в конце было тем, что я считал подстановочным знаком.
Было бы лучше отфильтровать "+ 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)]