Хотел бы прочитать в двух столбцах дат, но только получить один - PullRequest
0 голосов
/ 30 июня 2018

У меня есть текстовый файл с 6 столбцами. Я хочу, чтобы 2 столбца читались как даты для последующих различий. Тем не менее, я получаю только один столбец, возвращающийся как datetime . Есть идеи?

Кроме того, у меня есть несколько пустых дат, которые возвращают nan NOT 0 (нули) как в na_values ​​= 0 ??

import pandas as pd
CSV = 'text.csv'
df = pd.read_csv(CSV, 
                 skiprows = 0, 
                 na_values = 0, 
                 parse_dates = ['Date of Sign Up', 'Birth Date'],
                 usecols = ['Date of Sign Up', 'A', 'B', 'C', 'D', 'Birth Date'])

df.info()  # Check info for column types and nan...

RangeIndex: 969 entries, 0 to 968
Data columns (total 6 columns):
Date of Sign Up  969 non-null datetime64[ns]
A                969 non-null object
B                969 non-null object
C                969 non-null object
D                969 non-null object
Birth Date       969 non-null object ## <== Why doesn't this column read as datetime?
dtypes: datetime64[ns](1), object(5)
memory usage: 45.5+ KB

1 Ответ

0 голосов
/ 30 июня 2018

Проблема в том, что некоторые значения в Birth Date содержат хотя бы одну не разбираемую дату-время, поэтому read_csv не выполняет синтаксический анализ столбца.

Вы можете проверить эти значения:

dates = pd.to_datetime(df['Birth Date'], errors='coerce')

print (df.loc[dates.isnull(), 'Birth Date'])

Другим решением является анализ этих проблемных значений на NaT:

df['Birth Date'] = pd.to_datetime(df['Birth Date'], errors='coerce')

Я пытаюсь проверить, правильно ли 0 обработан NaT:

import pandas as pd

temp=u"""Date,a
2017-04-03,0
2017-04-04,1
0,2
2017-04-06,3
2017-04-07,4
2017-04-08,5"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), na_values = 0, parse_dates=['Date'])

print (df)
        Date    a
0 2017-04-03  NaN
1 2017-04-04  1.0
2        NaT  2.0
3 2017-04-06  3.0
4 2017-04-07  4.0
5 2017-04-08  5.0

print (df.dtypes)

Date    datetime64[ns]
a              float64
dtype: object

Если есть несколько не разбираемых значений:

import pandas as pd

temp=u"""Date,a
2017-04-03,0
string,1
0,2
2017-04-06,3
2017-04-07,4
2017-04-08,5"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), na_values = [0, 'string'], parse_dates=['Date'])

print (df)
        Date    a
0 2017-04-03  NaN
1        NaT  1.0
2        NaT  2.0
3 2017-04-06  3.0
4 2017-04-07  4.0
5 2017-04-08  5.0

print (df.dtypes)
Date    datetime64[ns]
a              float64
dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...