Warm tip: This article is reproduced from serverfault.com, please click

python-将 pandas 中的索引标签设置为to_stata

(python - Set index label in pandas to_stata)

发布于 2020-11-30 20:26:29

我想将pandas DataFrame保存为Stata格式的文件。更具体地说,需要将DataFrame的索引保存到该索引所在的列的标题中,并且该文本的标题必须为斜体:换句话说,我需要设置一个索引标签。

Pandas的to_csv有一个index_label选项,但是pandas的to_stata函数没有一个index_label选项。

以Stata格式保存时如何设置索引标签?

Questioner
raffaem
Viewed
0
Álvaro A. Gutiérrez-Vargas 2020-12-03 19:36:45

存在具有在已具有索引名称的数据帧(之间的微妙的差别情况1),并且当没有预先设置索引名(情况2)。

情况1:index_name已经存在(使用.set_index

import pandas as pd
#data
data = [['Eren Jaeger', 15,'Soldier' ] , ['Mikasa Ackerman', 14,'Soldier'], ['Armin Arlert', 14,'Soldier'],['Levi Ackerman', 30, 'Captain']]  
#creating DataFrame
df = pd.DataFrame(data, columns = ['Name', 'Age', 'Rank'])
#setting index_name based on a previous variable
df = df.set_index('Rank', drop=True)
#creating dta file (no need of .rename_axis(index='my_index'))
df.to_stata('stata_df_1.dta' )  

df
##                Name  Age
## Rank                         
## Soldier      Eren Jaeger   15
## Soldier  Mikasa Ackerman   14
## Soldier     Armin Arlert   14
## Captain    Levi Ackerman   30

情况2:索引编号没有命名(.rename_axis(index='my_index')必填)

基于@QuangHoang注释,这是一种在没有事先命名的情况下设置索引名称的方法。

data = [['Eren Jaeger', 15] , ['Mikasa Ackerman', 14], ['Armin Arlert', 14],['Levi Ackerman', 30]]  
df = pd.DataFrame(data, columns = ['Name', 'Age'])

df
##              Name  Age
## 0      Eren Jaeger   15
## 1  Mikasa Ackerman   14
## 2     Armin Arlert   14
## 3    Levi Ackerman   30

#this will have a first variable with digits 1 to 4 called "index" (default)
df.to_stata('stata_df_no_name.dta' )  

#this will have a first variable with digits 1 to 4 called "my_index"
df.rename_axis(index='my_index').to_stata('stata_df_2.dta')