Как удалить столбец данных (df) в Pandas на основе условия, если столбец присутствует в df? - PullRequest
2 голосов
/ 30 апреля 2020

У меня есть Python код, который извлекает данные из стороннего API. Ниже приведен код.

for sub in sublocation_ids:
    city_num_int = sub['id']
    city_num_str = str(city_num_int)
    city_name = sub['name']
    filter_text_new = filter_text.format(city_num_str)
    data = json.dumps({"filters": [filter_text_new], "sort_by":"fb_tw_and_li", "size":200, "from":1580491663000, "to":1588184960000, "content_type":"stories"})
    r = requests.post(url = api_endpoint, data = data).json()
    if r['articles'] != empty_list:
        articles_list = r["articles"]
        time.sleep(5)
        articles_list_normalized = json_normalize(articles_list)
        df = articles_list_normalized
        df['publication_timestamp'] = pd.to_datetime(df['publication_timestamp'])
        df['publication_timestamp'] = df['publication_timestamp'].apply(lambda x: x.now().strftime('%Y-%m-%d'))
        df['citystate'] = city_name
        df = df.drop('has_video', 1)
        df.to_excel(writer, sheet_name = city_name)
writer.save()

Теперь city_num_int = sub['id'] - это уникальный идентификатор для разных городов. Теперь API возвращает столбец «видео» для нескольких городов, а не для других. Я хочу избавиться от этого видео столбца, прежде чем он будет записан в файл Excel.

Мне удалось удалить столбец "has_video", используя df.drop, поскольку этот столбец присутствует в каждом потоке данных города. Но как сделать условное удаление для столбца "видео", поскольку он присутствует только для нескольких городов.

Ответы [ 2 ]

3 голосов
/ 30 апреля 2020

Вы можете игнорировать ошибки, вызванные Dataframe.drop:

df = df.drop(['videos'], axis=1, errors='ignore')

Другой способ - сначала проверить, присутствует ли столбец в DF, и только затем удалить его

Ссылка: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop.html

1 голос
/ 30 апреля 2020

Вы можете использовать списки по именам столбцов для достижения желаемого:

cols_to_keep = [c for c in df.columns if c != "videos"]
df = df[cols_to_keep]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...