Некорректно работает parse_dates в pd.read_excel()
Открываю Excel файл следующим образом:
with gzip.open('new.xlsx.gz') as a:
excel_file = pd.read_excel(a, sheet_name = 'Sheet', skiprows=range(0,2), parse_dates=["Unnamed: 0"])
excel_dates = pd.to_datetime(excel_file["Unnamed: 0"],errors="coerce").dt.floor("D").unique()
print(excel_dates)
print(excel_file.head(10))
print(excel_file.info())
Результат print(excel_dates):
['2020-11-14T00:00:00.000000000']
# и это все, строчек должно быть 100K +
Ожидаемый результат такой:
2020-11-14
2020-11-14
2020-11-14
Результат print(excel_file.head(10)):
Unnamed: 0
0 2020-11-14 00:00:00
1 2020-11-14 00:00:00
2 2020-11-14 00:00:00
Результат print(excel_file.info()):
0 Unnamed: 0 234374 non-null datetime64[ns]
Как правильно парсить даты? Их нужно сравнивать на совпадение с такими датами:
2020-08-09
2020-08-15
2020-10-25
2020-08-29
2020-10-11
Вот фрагмент данных, который скопирован c реальных данных.
Дополнение: При таком коде:
with gzip.open('new.xlsx.gz') as a:
excel_file = pd.read_excel(a, sheet_name = 'Sheet', skiprows=[0,2], parse_dates=[0])
excel_dates = pd.to_datetime(excel_file["Название столбца"],errors="coerce").dt.floor("D").unique()
И когда хочу напечатать print(excel_dates.info()):
Выходит ошибка:
print(excel_dates.info())
AttributeError: 'numpy.ndarray' object has no attribute 'info'
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
Судя по примеру данных, строки с индексами 0 и 2 нужно пропустить:
df = pd.read_excel("/path/to/test.xlsx", skiprows=[0,2], parse_dates=[0])
результат:
In [165]: df
Out[165]:
Period start time Name_2 Name_3 Name_4 Name_5 Name_6 Name_7 Name_8 Name_9 Name_10 Name_11 Name_12 ... Name_21 Name_22 Name_23 Name_24 Name_25 Name_26 Name_27 Name_28 Name_29 Name_30 Name_31 Name_32
0 2020-11-14 dgdt68bg edrt5464 rte544 0.64 0.65 0.46 0.49 0.57 0.96 0.20 0.92 ... 0.15 0.94 0.53 0.13 0.80 0.57 0.56 0.36 0.35 0.30 0.69 0.13
1 2020-11-14 sfsfe35 ew454 st43wt 0.24 0.48 0.37 0.05 0.87 0.94 0.28 0.41 ... 0.91 0.28 0.50 0.46 0.11 0.68 0.01 0.46 0.03 0.74 0.29 0.34
2 2020-11-14 sget4454 35353wfe et3453 0.33 0.67 0.04 0.25 0.57 0.54 0.75 0.84 ... 0.07 0.19 0.05 0.61 0.62 0.27 0.99 0.15 0.10 0.48 0.25 0.01
[3 rows x 32 columns]
In [166]: df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 32 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Period start time 3 non-null datetime64[ns]
1 Name_2 3 non-null object
2 Name_3 3 non-null object
3 Name_4 3 non-null object
4 Name_5 3 non-null float64
5 Name_6 3 non-null float64
6 Name_7 3 non-null float64
7 Name_8 3 non-null float64
8 Name_9 3 non-null float64
9 Name_10 3 non-null float64
10 Name_11 3 non-null float64
11 Name_12 3 non-null float64
12 Name_13 3 non-null float64
13 Name_14 3 non-null float64
14 Name_15 3 non-null float64
15 Name_16 3 non-null float64
16 Name_17 3 non-null float64
17 Name_18 3 non-null float64
18 Name_19 3 non-null float64
19 Name_20 3 non-null float64
20 Name_21 3 non-null float64
21 Name_22 3 non-null float64
22 Name_23 3 non-null float64
23 Name_24 3 non-null float64
24 Name_25 3 non-null float64
25 Name_26 3 non-null float64
26 Name_27 3 non-null float64
27 Name_28 3 non-null float64
28 Name_29 3 non-null float64
29 Name_30 3 non-null float64
30 Name_31 3 non-null float64
31 Name_32 3 non-null float64
dtypes: datetime64[ns](1), float64(28), object(3)
memory usage: 896.0+ bytes
Автор решения: MaxU
→ Ссылка
Если исходить из дополнительной информации, полученной из комментариев, основная проблема в том как преобразовать Numpy вектор в Pandas.Series:
excel_dates = pd.to_datetime(excel_file["Unnamed: 0"],errors="coerce").dt.floor("D").unique()
excel_dates = pd.Series(excel_dates)