Хорошо, похоже, ваша цель — иметь второй DataFrame с тем же количеством и именем столбцов, где каждый столбец содержит уникальные значения исходного DataFrame. Я не знаю, лучший ли это способ сделать это, поэтому я покажу вам, как я бы сделал это по-вашему, а затем предложу другой способ красиво напечатать это.
Как уже упоминалось, ошибка, которую вы получаете, связана с тем, что вы пытаетесь создать DataFrame со столбцами разной длины. Вы можете сделать это с некоторой ловкостью, если у вас все в порядке со значениями NaN в «пустых» ячейках. Я бы подошел к этому так:
- Получите имена столбцов и сохраните их в списке.
- Создайте список для хранения уникальных значений из каждого столбца df2 в виде новой серии.
- Итерация по имени каждого столбца, сохраняя новую серию уникальных значений каждого столбца.
- Выясните, какой столбец является самым длинным, и создайте пустой (заполненный NaN) DataFrame на основе количества столбцов и самого длинного списка уникальных значений.
Наконец, замените возможные значения NaN фактическими значениями и распечатайте DF.
import pandas as pd
colNames = df2.columns.tolist()
uniqueValsList = []
for each in colNames:
uniqueVals = list(df2[each].unique())
uniqueValsList.append(pd.Series(data=uniqueVals,name=each))
maxlen = 0
for each in uniqueValsList:
if len(each) > maxlen:
maxlen = len(each)
fillerData = np.empty((maxlen,len(colNames),))
dfDiff = pd.DataFrame(columns=colNames,data=fillerData)
for i in range(len(uniqueValsList)):
dfDiff[colNames[i]] = uniqueValsList[i]
dfDiff
Это позволит вам распечатать DF с вашими уникальными значениями, но это будет выглядеть странно со всеми значениями NaN. Я бы рекомендовал сделать это с помощью HTML и модуля tabulate
, как в этом ответе. Например:
from IPython.display import HTML, display
import tabulate
listOfLists = []
for i in range(len(uniqueValsList)):
thisList = []
thisList.append(colNames[i])
for each in uniqueValsList[i].tolist():
thisList.append(each)
listOfList.append(thisList)
display(HTML(tabulate.tabulate(listOfLists, tablefmt='html')
Я не знаком с LaTeX в Jupyter Notebooks, поэтому, если вы нашли лучший способ сделать это, мне было бы интересно узнать! Я пытался возиться со значениями tablefmt
в вызове display(HTML())
, но безрезультатно.
person
DangerousDave
schedule
26.05.2018