#python #csv #matplotlib
#python #csv #matplotlib
Вопрос:
Я хочу построить график для Covid-19 в Индии, и пока нет проблем, когда я вручную ввожу свои данные по осям x и y. Но поскольку данные довольно длинные, и когда я хочу прочитать их как .csv-файл, он выдает мне эту ошибку «значение» должно быть экземпляром str или bytes, а не с плавающей точкой. Я также попытался обернуть int(corona_case), но, выдав мне еще одну новую ошибку, не удается преобразовать ряд в Также я был бы очень признателен, если бы кто-нибудь мог предложить мне учебные пособия по построению графика с использованием даты и времени с использованием python, поскольку я впервые изучаю python. Я использую Python 3.
p / s Я, кажется, не могу найти способ поделиться своим csv-файлом, поэтому я оставлю его во фрагменте.
import pandas as pd
from datetime import datetime, timedelta
from matplotlib import pyplot as plt
from matplotlib import dates as mpl_dates
import numpy as np
plt.style.use('seaborn')
data = pd.read_csv('india.csv')
corona_date = data['Date']
corona_case = data['Case']
plt.plot_date (corona_date, corona_case, linestyle='solid')
plt.gcf().autofmt_xdate()
plt.title('COVID-19 in India')
plt.xlabel('Date')
plt.ylabel('Cumulative Case')
plt.tight_layout()
plt.show()
Date,Case
2020-09-30,6225763
2020-10-01,6312584
2020-10-02,6394068
2020-10-03,6473544
2020-10-04,6549373
2020-10-05,6623815
2020-10-06,6685082
Комментарии:
1. можете ли вы поделиться с нами файлом CSV?
2. вы пробовали метод astype ? int(corona_case) не будет работать, потому что вы пытаетесь преобразовать серию pandas в int . Это не то, что вы хотите сделать, поскольку ваша цель состоит в том, чтобы каждое значение в ряду имело тип int . Взгляните на документацию, я бы предположил, что это решает проблему. pandas.pydata.org/docs/reference/api/pandas . Series.astype.html
3. data.astype({‘Case’: ‘int32’})
4. Ваш код отлично работает с предоставленным вами фрагментом. Должно быть, что-то не так с полным файлом?
5. @jmandt Я тоже пробовал метод astype. Но на этот раз это выдает мне эту ошибку
ValueError: invalid literal for int() with base 10: '2020-01-30'.
, я также отформатировал свою дату, но, похоже, ничего не работает.
Ответ №1:
преобразовать все столбцы фрейма данных в dtype int64
df = df.astype(int)
преобразовать столбец «a» в dtype int64 и «b» в сложный тип
`df = df.astype({"a": int, "b": complex})`
преобразовать ряд в тип float16
s = s.astype(np.float16)
преобразование рядов в строки Python
s = s.astype(str)
преобразовать ряды в категориальный тип — подробнее см. Документы
s = s.astype('category')
Ответ №2:
Вы можете преобразовать тип столбца в pandas dataframe следующим образом.
corona_case = data['case'].astype(int) # or str for string
Если это то, что вы пытаетесь сделать.
Комментарии:
1. Привет, я тоже видел и пробовал это раньше, это тоже выдало бы мне ошибку, ValueError: недопустимый литерал для int() с основанием 10: ‘ t’
2. это означает, что в столбце case есть символы, не являющиеся числами, в данном случае tab(‘ t’). Вы можете попробовать удалить эти символы.
pd.to_numeric(data['case'], error='coerce')
который преобразует числовые значения в строке в числа, а не числовые значения в null, а затем удаляет нулевые значенияdata.dropna(subset=['case'])
.3. Я пробовал это, но все равно выдает ошибку значения. Я думаю, что с моей датой столбца что-то не так, поскольку я ввел не числовые символы 2020-01-30 ValueError: недопустимый литерал для int() с основанием 10: ‘2020-01-30’.
4.Я также добавил эти 2 строки, но все равно выдал мне ту же ошибку.
date_format = mpl_dates.DateFormatter('%b, %d, %Y')
plt.gca().xaxis.set_major_formatter(date_format)
5. Pandas считывает дату и время в строковом формате из csv. Вы можете преобразовать его в datetime как
data['Date'] = pd.to_datetime(data['Date'])
, и это работает с matplotlib. Было бы лучше, если бы вы могли поделиться csv.
Ответ №3:
Я не мог дать дополнительную информацию, но это может сработать:
corona_date = (data['Date']).astype(str)
corona_case = (data['Case']).astype(str)