ValueError: длина значений не соответствует длине фрейма данных index | Pandas.уникальный()
Я пытаюсь получить новый набор данных, или изменить значение текущего столбца набора данных уникальных значений. Вот пример того, что я пытаюсь сделать :
A B
-----
0| 1 1
1| 2 5
2| 1 5
3| 7 9
4| 7 9
5| 8 9
Wanted Result Not Wanted Result
A B A B
----- -----
0| 1 1 0| 1 1
1| 2 5 1| 2 5
2| 7 9 2|
3| 8 3| 7 9
4|
5| 8
Я действительно не забочусь об индексе, но, похоже, это проблема. Мой код до сих пор довольно прост, я попробовал 2 подхода, 1 с новым фреймом данных и один без.
#With New DataFrame
def UniqueResults(dataframe):
df = pd.DataFrame()
for col in dataframe:
S=pd.Series(dataframe[col].unique())
df[col]=S.values
return df
#Without new DataFrame
def UniqueResults(dataframe):
for col in dataframe:
dataframe[col]=dataframe[col].unique()
return dataframe
у меня есть ошибка" длина значений не соответствует длине индекса " оба раза.
1 ответов
ошибка возникает, когда вы пытаетесь назначить список массива numpy различной длины фрейму данных, и он может быть воспроизведен следующим образом:
фрейм данных из четырех строк:
df = pd.DataFrame({'A': [1,2,3,4]})
теперь пытается назначить ему список / массив из двух элементов:
df['B'] = [3,4] # or df['B'] = np.array([3,4])
обе ошибки:
ValueError: длина значений не соответствует длине индекса
потому что фрейм данных имеет четыре строки, но список и массив имеет только два элемента.
обойти решение (используйте с осторожностью): преобразуйте список / массив в серию pandas, а затем, когда вы выполните назначение, отсутствующий индекс в серии будет заполнен Нэн:
df['B'] = pd.Series([3,4])
df
# A B
#0 1 3.0
#1 2 4.0
#2 3 NaN # NaN because the value at index 2 and 3 doesn't exist in the Series
#3 4 NaN
для вашей конкретной проблемы, если вы не заботитесь об индексе или соответствие значений между столбцами, вы можете сбросить индекс для каждого столбца после падения дубликаты:
df.apply(lambda col: col.drop_duplicates().reset_index(drop=True))
# A B
#0 1 1.0
#1 2 5.0
#2 7 9.0
#3 8 NaN