Почему я получаю двойные столбцы, когда добавляю фрейм данных, не создавая пустой фрейм данных? - PullRequest
0 голосов
/ 12 апреля 2020
txtfile=open('university_towns.txt','r')
df=pd.DataFrame(columns=('State','Region'))
state=''
for i in txtfile:
    if '[edit]' in i:
        i=i[:i.find('[')].strip()
        state=i
        continue
    region=i.strip()
    if '(' in region:
        k=region.find('(')
        region=region[:(k-1)]
    df = df.append(pd.DataFrame([[state, region]]), ignore_index=True)
print(df)

В этом коде, если я уже создал пустой фрейм данных с именами столбцов: State и Region. Теперь, когда я пытаюсь добавить значения state и region, полученные при разборе текстового файла, к фрейму данных, он показывает два дополнительных столбца с именами State и Region со значениями NaN. и еще два столбца с именами 0 и 1 с фактическими значениями состояния и региона.

Теперь я изменил код следующим образом:

#def get_list_of_university_towns():
txtfile=open('university_towns.txt','r')
df=pd.DataFrame(columns=('State','Region'))
state=''
for i in txtfile:
    if '[edit]' in i:
        i=i[:i.find('[')].strip()
        state=i
        continue
    region=i.strip()
    if '(' in region:
        k=region.find('(')
        region=region[:(k-1)]
df.loc[:,'State']=state
df.loc[:,'Region']=region
print(df)

В нем отображается пустой фрейм данных. Входные данные - файл скопировано с этой страницы Википедии, указанной в ссылке https://en.wikipedia.org/wiki/List_of_college_towns#College_towns_in_the_United_States

1 Ответ

0 голосов
/ 12 апреля 2020

В качестве Альтернативного подхода:

вы также можете заменить полный аппенд, вызывая эту строку кода:

df.loc[len(df), :] = [state, region]  

Этот шоудл также работает как он добавляет обе переменные, которые вы извлекли в виде списка, в конец кадра данных.

Причина проблемы:

Проблема заключается в том, что при вашем подходе к созданию нового кадра данных на каждой итерации df.append(pd.DataFrame()) в том, что у вновь созданного df отсутствуют имена столбцов исходного df

Не могли бы вы попытаться указать метки столбцов, как это в вашем коде? Как это:

df = df.append(pd.DataFrame([state, region], columns=('State','Region')),ignore_index=True) 

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

df=pd.DataFrame([state,region], columns=('State','Region'))

Или назначьте список столбцам, вызвав

df.loc[:,'State'] = state
df.loc[:,'Region'] = region
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...