Pandas возвращает DataError, когда Seaborn строит график данных, созданный из списков. - PullRequest
2 голосов
/ 04 апреля 2019

Когда я попытался построить фрейм данных pandas в seaborn, я получил DataError. Я исправил проблему, воссоздавая фрейм данных из словаря вместо использования списков и цикла for. Тем не менее, я до сих пор не понимаю, почему я получил ошибку в первом случае. Два кадра данных выглядят одинаково для меня. Может кто-нибудь объяснить, что здесь происходит?

# When I create two seemingly identical data frames.
x = [0, 1, 2]
y = [3, 5, 7]
line_df1 = pd.DataFrame(columns=['x','y'])
for i in range(3):
    line_df1.loc[i] = [x[i], y[i]]

line_dict = {'x': [0, 1, 2], 'y': [3, 5, 7]}
line_df2 = pd.DataFrame(line_dict)

# they look identical when printed
print(line_df1)
print(line_df2)

>>    x  y
>> 0  0  3
>> 1  1  5
>> 2  2  7

>>    x  y
>> 0  0  3
>> 1  1  5
>> 2  2  7


# This first one throws a DataError...
sns.lineplot('x', 'y', data=line_df1)

# ..but this one does not.
sns.lineplot('x', 'y', data=line_df2)

1 Ответ

2 голосов
/ 04 апреля 2019

Проблема в том, что первые значения - это объекты, проверенные DataFrame.dtypes:

print(line_df1.dtypes)
x    object
y    object
dtype: object

print(line_df2.dtypes)
x    int64
y    int64
dtype: object

Решение для правильной работы первого решения установлено dtype пусто DataFrame:

line_df1 = pd.DataFrame(columns=['x','y'], dtype=int)

Но если важна производительность, лучше второе решение, поскольку пустое обновление DataFrame равно последний экземпляр :

6) обновление пустого фрейма (например, используя loc по одной строке за раз)

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