有没有办法从数据帧中提取构成数据帧的代码?

时间:2019-02-17 15:08:43

标签: python-3.x pandas dataframe

我正在寻找一种从加载的数据帧中提取构成数据帧的代码的方法。

请考虑以下过程。

# Code to construct a df:

df = pd.DataFrame({'num_legs': [2, 4, 8, 0],
'num_wings': [2, 0, 0, 0],
'num_specimen_seen': [10, 2, 1, 8]},
index=['falcon', 'dog', 'spider', 'fish'])

# Obtain the df output:

df
        num_legs  num_wings  num_specimen_seen
falcon         2          2                 10
dog            4          0                  2
spider         8          0                  1
fish           0          0                  8

我正在寻找一个自动化的反向过程。假设我从df开始,它是从csv文件加载的(下面的示例,与上面的df相同)。

df = 
pd.read_csv('/path_to_data/df.csv', sep='\t')
df
        num_legs  num_wings  num_specimen_seen
falcon         2          2                 10
dog            4          0                  2
spider         8          0                  1
fish           0          0                  8

在这一点上,有一种方法可以提取代码(下面列出),假设我没有开始的代码,该方法将构建df。

    df = pd.DataFrame({'num_legs': [2, 4, 8, 0],
    'num_wings': [2, 0, 0, 0],
    'num_specimen_seen': [10, 2, 1, 8]},
    index=['falcon', 'dog', 'spider', 'fish'])

这并不总是有用的,但出于某些可移植性的目的,我很好奇能否做到这一点。例如,这将允许共享一个jupyter笔记本文档,而无需引用任何外部文件。并允许完全自我维持的数据分析可重复性。

1 个答案:

答案 0 :(得分:1)

您可以分别使用df.to_dict('list')df.index获取此信息:

In [9]: df
Out[9]:
        num_legs  num_wings  num_specimen_seen
falcon         2          2                 10
dog            4          0                  2
spider         8          0                  1
fish           0          0                  8

In [10]: df.to_dict('list')
Out[10]:
{'num_legs': [2, 4, 8, 0],
 'num_wings': [2, 0, 0, 0],
 'num_specimen_seen': [10, 2, 1, 8]}

In [11]: df.index
Out[11]: Index(['falcon', 'dog', 'spider', 'fish'], dtype='object')

In [12]: new_df = pd.DataFrame(df.to_dict('list'), index=df.index)

In [13]: new_df
Out[13]:
        num_legs  num_wings  num_specimen_seen
falcon         2          2                 10
dog            4          0                  2
spider         8          0                  1
fish           0          0                  8