Добавление специальных символов между строками в фрейме данных

#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('!')