Ошибка фрагментации кадра данных "TypeError: индексы кортежа должны быть целыми числами или фрагментами, а не str" - PullRequest
2 голосов
/ 27 мая 2020

Я хочу разрезать df, чтобы сформировать df1 на основе значения Data.

df:

           Id   Timestamp               Data
106272  106273  2013-09-10 16:40:40.467 86.0
106273  106274  2013-09-10 16:40:41.267 86.0
106274  106275  2013-09-10 16:40:42.053 59.0
106275  106276  2013-09-10 16:40:42.857 52.0
106278  106279  2013-09-10 16:41:00.173 61.5

Затем я вырезал df, если Data находится в диапазоне [20, 100], с кодом:

df_copy = df.copy()
df1 = df_copy[(df_copy["Data"]>=20) & (df_copy["Data"]<=100)]

Это сработало нормально.

Затем я хотел сгруппировать df и df1 по date из Timestamp:

import datetime
df['Date'] = [datetime.datetime.date(d) for d in df['Timestamp']]

x = pd.DataFrame(df.groupby(['Date']).size())
x.columns = ['values']

# -----------------------------------

df1['Date'] = [datetime.datetime.date(d) for d in df1['Timestamp']]

x1 = pd.DataFrame(df1.groupby(['Date']).size())
x1.columns = ['values']

Однако это сработало только для df, но обнаружила ошибку для df1:

TypeError                                 Traceback (most recent call last)
<ipython-input-15-2ddde01b3d65> in <module>

---> 12 df1['Date'] = [datetime.datetime.date(d) for d in df1['Timestamp']]
     13 
     14 x1 = pd.DataFrame(df1.groupby(['Date']).size())

TypeError: tuple indices must be integers or slices, not str

Почему?

1 Ответ

0 голосов
/ 27 мая 2020

Новый столбец с пониманием lsit и конструктором DataFrame не требуется, используйте Series.dt.date с Series.to_frame:

x = (df.groupby(df['Timestamp'].dt.date)
       .size()
       .to_frame('values'))


df1 = df[(df["Data"]>=20) & (df["Data"]<=100)].copy()

x1 = (df1.groupby(df1['Timestamp'].dt.date)
         .size()
         .to_frame('values'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...