Чтение нескольких файлов с помощью панд - PullRequest
0 голосов
/ 17 апреля 2019

Я хочу прочитать несколько файлов одновременно. У меня есть данные в двух файлах, как показано ниже:

данные:

123.22.21.11,sid
112.112.11.1,john
110.11.23.23,jenny
122.23.21.13,ankit  

данные1:

145.123.11.1, Joaquin  

Я попробовал пару ответов по этой ссылке.Ниже приведен мой код:

df = pd.concat(map(pd.read_csv, glob.glob(os.path.join(" ", "/home/cloudera/Desktop/sample/*"))))  

Когда я запускаю этот код, он дает мне вывод, как показано ниже:

>>> df
   123.22.21.11 145.123.11.1 Joaquin    sid
0  112.112.11.1          NaN     NaN    NaN
1  110.11.23.23          NaN     NaN    NaN
2  122.23.21.13          NaN     NaN    NaN
0  112.112.11.1          NaN     NaN   john
1  110.11.23.23          NaN     NaN  jenny
2  122.23.21.13          NaN     NaN  ankit

Но когда я отображаю, мне нужен вывод, как показано ниже и в разных столбцах:

123.22.21.11,sid
112.112.11.1,john
110.11.23.23,jenny
122.23.21.13,ankit
145.123.11.1,Joaquin  

Так как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Я думаю, было бы проще и удобнее разбить его на несколько шагов.Вы также хотите явно указать пандам, что заголовков нет, передав header=None в pd.read_csv.

# Get list of files
files = glob.glob(os.path.join(" ", "/home/cloudera/Desktop/sample/*"))
# Read list of files into a list of dataframes
df_list = [pd.read_csv(f, header = None) for f in files]
# Stack all dataframes into one (you can change the parameters as you want)
df = pd.concat(df_list, ignore_index = True, sort = False) 
1 голос
/ 17 апреля 2019

Ваша проблема в том, что pd.read_csv() по умолчанию хочет заголовки / имена столбцов.Concat использует их для соответствия.Я могу передать kwarg names=None используя "partial" в map.

import glob
import os
import pandas as pd
from functools import partial
mapfunc = partial(pd.read_csv, header=None)
df = pd.concat(map(mapfunc, glob.glob(os.path.join(" ", "/home/cloudera/Desktop/sample/*"))))

Вывод:

              0         1
0  123.22.21.11       sid
1  112.112.11.1      john
2  110.11.23.23     jenny
3  122.23.21.13     ankit
0  145.123.11.1   Joaquin

Вы можете увидеть информацию по частям здесь: Используя карту() функция с аргументами ключевого слова

Редактировать, по запросу:

Это не очень красиво, но вы можете перебирать каталог и использовать переменный «счетчик» для обработки «счетчика»файлы одновременно.

# Initialize Variables
fpath = "C:/Users/5188048/Desktop/example/"
interval = 5
filenames = []

# loop through files in directory
for i, j in enumerate(os.listdir(fpath)):

    # append filenames to list, initialized previously
    filenames.append(j)

    # for every interval'th file, perform this...
    if (i+1)%interval==0:

        # use first file to initialize dataframe
        temp_df = pd.read_csv(fpath+filenames[0], header=None)

        # loop through remaining files
        for file in filenames[1:]:

            # concatenate additional files to dataframe
            temp_df = pd.concat([temp_df, pd.read_csv(fpath+file, header=None)], ignore_index=True)

        # do your manipulation here, example reset column names
        temp_df.columns = ['IP_Address', 'Name']

        # Generate outfile variable name & path
        out_file = fpath+'out_file_' + str(int((i+1)/interval)) + '.csv'

        # write outfile to csv
        temp_df.to_csv(out_file, index=False)

        # reset variable
        filenames = []

    else:

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