Соглашение о кодировании для добавления строк в Pandas Dataframe в цикле for - PullRequest
0 голосов
/ 18 февраля 2020

Я пишу программу, в которой я хочу извлечь данные из нескольких файлов DOCX и заполнить их в pandas фрейме данных. В настоящее время я достигаю этого в течение l oop примерно так:

cols = ["path","col1", "col2", "col3", "col4"]

def add_to_df(path):
    col1_val = extract_col1(path)
    col2_val = extract_col2(path)
    col3_val = extract_col3(path)
    col4_val = extract_col4(path)

    temp_df = pd.DataFrame(
        [[path, col1_val,col2_val,col3_val,col4_val]],
        columns=cols) 
    return temp_df

df = pd.DataFrame() 
for path in paths:
    df = df.append(add_to_df(path), ignore_index=True)

Это лучший способ сделать это? Или есть более хороший, более приемлемый способ? (Это просто упрощенный пример того, что я пытаюсь сделать, реальный код выглядит намного более беспорядочным ...)

Ответы [ 2 ]

2 голосов
/ 18 февраля 2020

Я предпочитаю сначала извлечь данные в словарь, а затем создать фрейм данных из этого словаря. Пример:

data = {'doc1': {'subject': 'x', 'n_words': 100},
        'doc2': {'subject': 'y', 'n_words': 200},
        'doc3': {'subject': 'z', 'n_words': 300}}

df = pd.DataFrame.from_dict(data, orient='index')

print(df)

Результат:

     subject  n_words
doc1       x      100
doc2       y      200
doc3       z      300
2 голосов
/ 18 февраля 2020

Я думаю, лучше создать список списков вместо множества DataFrame с, а затем перейти к конструктору DataFrame:

def add_to_df(path):
    col1_val = extract_col1(path)
    col2_val = extract_col2(path)
    col3_val = extract_col3(path)
    col4_val = extract_col4(path)

    temp_L = [path, col1_val,col2_val,col3_val,col4_val]
    return temp_L

Решение для понимания списка:

L = [add_to_df(path) for path in paths]

Если хотите использовать для l oop:

L = []
for path in paths:
    L.append(add_to_df(path))

df = pd.DataFrame(L, columns=cols) 
...