#python #pandas #dataframe
#python #панды #фрейм данных
Вопрос:
Допустим, у меня есть список таких списков:
Ввод:
a = [1,2,3]
b = [4,5,6]
c = [7,8,9]
abc = [a,b,c]
abc
Вывод:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
И я преобразую его в фрейм данных следующим образом:
df = pd.DataFrame(data = abc, columns = ['a','b','c'])
Чтобы получить таблицу, подобную этой:
a b c
1 2 3
4 5 6
7 8 9
Как бы я поместил специальный символ (например! или #) между каждым списком (то есть каждой строкой)?
В значительной степени то, что я хочу, это:
a b c
1 2 3
! ! !
4 5 6
! ! !
7 8 9
Комментарии:
1. Можете ли вы объяснить, почему, по вашему мнению, что-то подобное действительно было бы полезно?
2. Вы можете заглянуть в пакет prettytable, texttable, termtable или tabulate, если хотите, чтобы фрейм данных был отформатирован в оболочке по-другому.
3. @DavidErickson Это не мой вопрос, поэтому я не могу установить для него решение. Попробуйте спросить taliamycota
4. @DavidErickson Все хорошо. Не нужно извиняться 🙂
Ответ №1:
Более простой, но простой для понимания способ — создать новый фрейм данных из существующего фрейма данных и установить для каждого столбца значение !
. Затем добавьте к исходному фрейму данных и отсортируйте по индексу:
df1 = df.copy()
for col in df1.columns: df1[col] = '!'
df.append(df1).sort_index().iloc[:-1]
Out[1]:
a b c
0 1 2 3
0 ! ! !
1 4 5 6
1 ! ! !
2 7 8 9
Если вам нужен новый индекс без повторяющихся значений, вы также можете сделать:
df.append(df1).sort_index().reset_index(drop=True).iloc[:-1]
a b c
0 1 2 3
1 ! ! !
2 4 5 6
3 ! ! !
4 7 8 9
Ответ №2:
Если ваш индекс является индексом диапазона по умолчанию, то вы можете использовать что-то вроде np.linspace.
df.reindex(np.linspace(0,df.index.max(),df.index.max()*2 1)).fillna('!').reset_index(drop=True)
Вывод:
a b c
0 1 2 3
1 ! ! !
2 4 5 6
3 ! ! !
4 7 8 9
Ответ №3:
Вот способ:
df = pd.DataFrame(data = abc, columns = ['a','b','c'],index=range(0,len(abc)*2,2))
df = df.reindex(range(len(abc)*2)).fillna('!')