Python конвертирует CSV-файлы в датафреймы - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть большой CSV-файл, содержащий такие данные, как:

2018-09, 100, A, 2018-10, 50, M, 2018-11, 69, H,....

и так далее. (непрерывный поток без отдельных рядов)

Я бы хотел преобразовать его в датафрейм, который бы выглядел примерно так:

Col1     Col2  Col3
2018-09  100   A
2018-10  50    M
2018-11  69    H

Это упрощенная версия фактических данных. Пожалуйста, посоветуйте, как лучше всего к нему подойти.

Редактировать: Для пояснения, мой CSV-файл не имеет отдельных строк для каждой строки. Все данные в одной строке.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018
data = pd.read_csv('tmp.txt', sep=',\s *', header=None).values
pd.DataFrame(data.reshape(-1, 3), columns=['Col1', 'Col2', 'Col3'])

возвращает

      Col1 Col2 Col3
0  2018-09  100    A
1  2018-10   50    M
2  2018-11   69    H
0 голосов
/ 09 ноября 2018

Одним из решений является разделение вашей отдельной строки на куски с помощью модуля csv и этого алгоритма , а затем передача в конструктор pd.DataFrame. Обратите внимание, что ваш фрейм данных будет иметь тип dtype object, поэтому впоследствии вам придется явно приводить типы числовых рядов.

from io import StringIO
import pandas as pd
import csv

x = StringIO("""2018-09, 100, A, 2018-10, 50, M, 2018-11, 69, H""")

# define chunking algorithm
def chunks(L, n):
    """Yield successive n-sized chunks from l."""
    for i in range(0, len(L), n):
        yield L[i:i + n]

# replace x with open('file.csv', 'r')
with x as fin:
    reader = csv.reader(fin, skipinitialspace=True)
    data = list(chunks(next(iter(reader)), 3))

# read dataframe
df = pd.DataFrame(data)

print(df)

         0    1  2
0  2018-09  100  A
1  2018-10   50  M
2  2018-11   69  H
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...