Как извлечь только год(ГГГГ) из столбца CSV с такими данными, как ГГГГ-ГГГГ

#python #pandas #datetime #data-visualization #bokeh

Вопрос:

Я новичок в Python/Боке/Пандах.

Я могу построить линейный график в панд/боке, используя параметры parse_date.

Однако я наткнулся на набор данных(.csv), где столбец выглядит следующим образом введите описание изображения здесь

Мой код, как показано ниже, дает пустой график, если столбец «Год/Порты» находится в форме ГГГГ-ГГГГ, например, с 1952-53, 1953-54, 1954-55 и т.д.

Нужно ли мне извлекать только ГГГГ и график, потому что это работает, но я уверен, что данные должны визуализироваться не так.

Если я извлеку только ГГГГ с помощью CSV или инструментов Notepad , то проблем не возникнет, так как даты читаются идеально, и я получу хороший осмысленный линейный график

 #Total Cargo Handled at Mormugao Port from 1950-51 to 2019-20  import pandas as pd from bokeh.plotting import figure,show from bokeh.io import output_file  #read the CSV file shared by GOI  df = pd.read_csv("Cargo_Data_full.csv",parse_dates=["Year/Ports"])  # selecting rows based on condition  output_file("Cargo tracker.html")   f = figure(height=200,sizing_mode = 'scale_width',x_axis_type = 'datetime')  f.title.text = "Cargo Tracker" f.xaxis.axis_label="Year/Ports" f.yaxis.axis_label="Cargo handled"  f.line(df['Year/Ports'],df['OTHERS'])  show(f)  

Комментарии:

1. У меня нет возможности проверить это,но вы могли бы попробовать: f.строка([y[:4] для y в df[‘Год/Порты’]], df[‘ДРУГИЕ»])

Ответ №1:

Вы не можете использовать parse_dates в этом случае, так как формат не является допустимым для даты и времени. Вы можете использовать pandas нарезку строк, чтобы сохранить только часть ГГГГ.

 df = pd.DataFrame({'Year/Ports':['1952-53', '1953-54', '1954-55'], 'val':[1,2,3]})  df['Year/Ports'] = df['Year/Ports'].str[:4]  print(df)   Year/Ports val 0 1952 1 1 1953 2 2 1954 3  

Оттуда вы можете превратить его в datetime , если это имеет для вас смысл.

 df['Year/Ports'] = pd.to_datetime(df['Year/Ports'])  print(df)   Year/Ports val 0 1952-01-01 1 1 1953-01-01 2 2 1954-01-01 3   

Комментарии:

1. Спасибо.. Я попробую это ..на самом деле я вырезал год/порты в CSV, используя функции excel, чтобы это работало …я постараюсь сделать в соответствии с вашим предложением, чтобы все происходило в программе

2. Если это сработает, пожалуйста, отметьте как принятый ответ.