Почему оператор «*» между фреймом данных и серией выдает мне len (firstSeries) * len (secondSeries) с NaNs?

#python #pandas #datetimeindex

#python #панды #datetimeindex

Вопрос:

Я получил res = dataframe * dataframe['column'] с <class 'pandas.core.frame.DataFrame'> для первого фрейма данных и <class 'pandas.core.series.Series'> для dataframe['column']

И это выводит меня : res : 2020-08-17 05:00:00 2020-08-17 05:15:00 2020-08-17 05:30:00 ... dtime 2020-08-24 16:45:00 NaN NaN NaN ... 2020-08-24 16:30:00 NaN NaN NaN ... 2020-08-24 16:15:00 NaN NaN NaN ... 2020-08-24 16:00:00 NaN NaN NaN ... 2020-08-24 15:45:00 NaN NaN NaN ... ... 2020-08-17 06:00:00 NaN NaN NaN ... 2020-08-17 05:45:00 NaN NaN NaN ... 2020-08-17 05:30:00 NaN NaN NaN ... 2020-08-17 05:15:00 NaN NaN NaN ... 2020-08-17 05:00:00 NaN NaN NaN ...

Все, что я нахожу, говорит мне, что «*» должно давать мне : res : dtime 2020-08-24 16:45:00 floatValue 2020-08-24 16:30:00 floatValue 2020-08-24 16:15:00 floatValue 2020-08-24 16:00:00 floatValue 2020-08-24 15:45:00 floatValue ... 2020-08-17 06:00:00 floatValue 2020-08-17 05:45:00 floatValue 2020-08-17 05:30:00 floatValue 2020-08-17 05:15:00 floatValue 2020-08-17 05:00:00 floatValue

Я уверен, что мне чего-то не хватает, но я не могу найти, чего.

Редактировать :

 import pandas
df = pandas.DataFrame({"angles": [0, 3, 4], "degrees": [360, 180, 360]}, index=["circle", "triangle", "rectangle"])
other = pandas.DataFrame({"angles": [0, 3, 4]}, index=["circle", "triangle", "rectangle"])
print("df * other :", df * other)
  

выдает мне :

 df * other :
           angles  degrees
circle          0      NaN
triangle        9      NaN
rectangle      16      NaN
  

как и ожидалось. Так что, возможно, это связано с индексом DatetimeIndex.

Редактировать :

 import pandas

df = pandas.DataFrame({'angles': [0, 3, 4], 'degrees': [360, 180, 360]}, index=['2020-08-17 05:30:00', '2020-08-17 05:15:00', '2020-08-17 05:00:00'])
other = pandas.DataFrame({'angles': [0, 3, 4]}, index=['2020-08-17 05:30:00', '2020-08-17 05:15:00', '2020-08-17 05:00:00'])
df.index = pandas.to_datetime(df.index, format='%Y-%m-%d %H:%M:%S')
other.index = pandas.to_datetime(other.index, format='%Y-%m-%d %H:%M:%S')

print("df * other :", df * other)
  

выдает :

 df * other :         angles  degrees
2020-08-17 05:30:00       0      NaN
2020-08-17 05:15:00       9      NaN
2020-08-17 05:00:00      16      NaN
  

Так что это не DatetimeIndex.

Ответ №1:

в вашем небольшом примере вы умножаете df * df [т. Е. other ]. вы получите ту же проблему, если будете использовать df * df.angles [т.е. df * series ]

но в основной проблеме вы используете df * series. попробуйте использовать df * pd.DataFrame(df.col) .

в серии df *: он сравнивает по столбцам так же, как df.multiply (df.series, axis = 1), вы также можете попробовать df.multiply(df.series, axis = 0)