Как добавить Dataframe по строкам в Python - PullRequest
0 голосов
/ 03 мая 2018

Я хотел бы объединить (используя df.append()) некоторые кадры данных Python по строкам. Приведенный ниже код начинается с чтения всех json-файлов, которые находятся на входе json_dir_path, он читает input_fn = json_data["accPreparedCSVFileName"], содержащий полный путь к файлу csv, который хранится, и считывает его во фрейме данных df_i. Когда я пытаюсь объединить df_output = df_i.append(df_output), я не получил желаемых результатов.

    def __merge(self, json_dir_path):
    if os.path.exists(json_dir_path):
        filelist = [f for f in os.listdir( json_dir_path )]

        df_output = pd.DataFrame()
        for json_fn in filelist:
            json_full_name = os.path.join( json_dir_path, json_fn )
            # print("[TrainficationWorkflow::__merge] We are merging the json file ", json_full_name)
            if os.path.exists(json_full_name):
                with open(json_full_name, 'r') as in_json_file:
                    json_data = json.load(in_json_file)
                    input_fn = json_data["accPreparedCSVFileName"]
                    df_i = pd.read_csv(input_fn)
                    df_output = df_i.append(df_output)
        return df_output
    else:
        return pd.DataFrame(data=[], columns=self.DATA_FORMAT)

Я получил только 2 файла, которые были объединены из 12. Что я делаю не так?

Любая помощь будет принята с благодарностью.

С наилучшими пожеланиями, Карло

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Я настоятельно рекомендую вам не объединять кадры данных в цикле.

Гораздо эффективнее хранить ваши фреймы данных в списке, а затем объединять элементы вашего списка за один вызов. Например:

lst = []

for fn in input_fn:
    lst.append(pd.read_csv(fn))

df_output = pd.concat(lst, ignore_index=True)
0 голосов
/ 03 мая 2018

Вы также можете установить ignore_index=True при добавлении.

df_output = df_i.append(df_output, ignore_index=True)

Также вы можете объединить кадры данных:

df_output = pd.concat((df_output, df_i), axis=0, ignore_index=True)

Как @jpp предложил в своем ответе, вы можете загрузить список фреймов данных и объединить их за один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...