Как импортировать CSV или TXT-файл, где нет разделителя и запятые представляют пропущенные значения - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь импортировать значения из CSV в 10 столбцов: у некоторых есть числа, а у некоторых есть запятые, но в запятых отсутствуют значения, поэтому разделителя нет:

2000-01-05,,-0.8803936956661669,,,,,,,-0.8316023477879247,

2000-01-06,,,,,,,,,,

2000-01-07,,,,,,,,,-0.3133976053851764,

2000-01-10,-0.26878027549229977,,,,,,,,,

2000-01-11,,,,,,,,1.0787295663966179,,

Я попробовал код ниже, но он удаляет столбец даты на левой стороне:

data = np.genfromtxt('Book7.txt', invalid_raise = True, usemask = False)
datanew = data[:,~np.all(np.isnan(data), axis = 0)]

Ответы [ 3 ]

1 голос
/ 23 мая 2019

Я не знаю, что вы хотите, чтобы отсутствующие данные были, но этот код преобразует столбец даты в datetime.date, а для пропущенных значений устанавливается значение NaN.

import numpy as np
import datetime

def convert_iso_string_to_date(s):
    year, month, day = (int(x) for x in s.decode("ascii").split("-"))
    return datetime.date(year, month, day)

data = np.genfromtxt("test.txt", delimiter=",", converters={0: convert_iso_string_to_date}, invalid_raise=True, usemask=False)
print(data)
[(datetime.date(2000, 1, 5),         nan, -0.8803937, nan, nan, nan, nan, nan,        nan, -0.83160235, nan)
 (datetime.date(2000, 1, 6),         nan,        nan, nan, nan, nan, nan, nan,        nan,         nan, nan)
 (datetime.date(2000, 1, 7),         nan,        nan, nan, nan, nan, nan, nan,        nan, -0.31339761, nan)
 (datetime.date(2000, 1, 10), -0.26878028,        nan, nan, nan, nan, nan, nan,        nan,         nan, nan)
 (datetime.date(2000, 1, 11),         nan,        nan, nan, nan, nan, nan, nan, 1.07872957,         nan, nan)]
0 голосов
/ 23 мая 2019

Вы можете просто использовать встроенную функцию Python:

from numpy import array

with open('Book7.txt') as file:
    data = file.readlines()

matrix = []
for line in data:
    if line != '\n':
        matrix.append(line.split(',')[0:10])
matrix = array(matrix)
0 голосов
/ 23 мая 2019

Не уверен, является ли numpy предпочтительным или обязательным Панды могут делать это без дополнительных кодов:

import io
import pandas as pd

text = """2000-01-05,,-0.8803936956661669,,,,,,,-0.8316023477879247,

2000-01-06,,,,,,,,,,

2000-01-07,,,,,,,,,-0.3133976053851764,

2000-01-10,-0.26878027549229977,,,,,,,,,

2000-01-11,,,,,,,,1.0787295663966179,,"""

csv = io.StringIO(text)

df = pd.DataFrame([cell.split(',') for cell in csv])

print(df)

Выход:

           0                     1   ...                   9     10
0  2000-01-05                        ...  -0.8316023477879247    \n
1          \n                  None  ...                 None  None
2  2000-01-06                        ...                         \n
3          \n                  None  ...                 None  None
4  2000-01-07                        ...  -0.3133976053851764    \n
5          \n                  None  ...                 None  None
6  2000-01-10  -0.26878027549229977  ...                         \n
7          \n                  None  ...                 None  None
8  2000-01-11                        ...                           

[9 rows x 11 columns]

Возможно, вы захотите удалить пустые строки.

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