datetime.datetime.strptime для преобразования строки в datetime встречается с ошибками, не преобразованными, оставшимися датами: 2 - PullRequest
0 голосов
/ 05 ноября 2018

Файл csv содержит 18 столбцов, из которых 6 столбцов: «год», «месяц», «день», «часы», «минуты», «секунды», тип данных которых «INT», кроме столбцов ». секунд 'это число с плавающей точкой.

Во-первых, я преобразовал типы int и float в строку, а затем объединил их, затем использовал the datetime.datetime.strptime для преобразования их в тип даты. Но как-то не получается.

Возвращает:

File "/anaconda3/lib/python2.7/_strptime.py", line 335, in _strptime
data_string[found.end():])

ValueError: unconverted data remains: 2

Используемый код: импорт панд в виде pd время импорта дата импорта время

df=pd.read_csv('/Users/song/PycharmProjects/AAA/nppanda/LASTROW/LASTROW_GTE Aurich.csv')
df.dropna(how='any')
df.columns=['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17']

df['18']=df['12'].apply(lambda x:str(x))
df['19']=df['13'].apply(lambda x:str(x))
df['20']=df['14'].apply(lambda x:str(x))
df['21']=df['15'].apply(lambda x:str(x))
df['22']=df['16'].apply(lambda x:str(x))
df['23']=df['17'].apply(lambda x:str(x))

df['24']=df['18'].str.cat(df['19'],sep='-')
df['24']=df['24'].str.cat(df['20'],sep='-')
df['24']=df['24'].str.cat(df['21'],sep=' ')
df['24']=df['24'].str.cat(df['22'],sep=':')
df['24']=df['24'].str.cat(df['23'],sep=':')

def has_seconds(a_string):
    if a_string.find('.')!=-1:
        transtime=datetime.datetime.strptime(a_string,'%Y-%m-%d %H:%M:%S.%f')
    elif a_string.find('.')==-1:
        transtime=datetime.datetime.strptime(a_string,'%Y-%m-%d %H:%M:%S')
    return transtime   

df['25']=df['24'].apply(has_seconds)

1 Ответ

0 голосов
/ 05 ноября 2018

Вы думаете об этом с Пандами. Если ваши столбцы имеют правильное имя, вы можете указать непосредственно pd.to_datetime. Кроме того, избегайте использования модуля Python datetime с Pandas:

df = pd.DataFrame([[2015, 12, 20, 15, 10, 3.1234],
                   [2018, 5, 15, 10, 12, 65.432]],
                  columns=['year','month','day','hours','minutes','seconds'])

df['datetime'] = pd.to_datetime(df)

print(df)

   year  month  day  hours  minutes  seconds                   datetime
0  2015     12   20     15       10   3.1234 2015-12-20 15:10:03.123400
1  2018      5   15     10       12  65.4320 2018-05-15 10:13:05.432000

Примечание datetime значения хранятся внутри как целых чисел . Имеет смысл избегать этой поездки туда и обратно:

  1. str, входной файл CSV
  2. int через pd.read_csv
  3. str через pd.Series.apply
  4. int через datetime.strptime.

Все очень дорого и ненужно.

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