给定一个数据帧,有没有一种简单的方法可以打印出一个命令来生成它?

2024-04-20 12:46:51 发布

您现在位置:Python中文网/ 问答频道 /正文

在运行了一些命令之后,我得到了一个数据帧,例如:

>>> print df
   B  A
1  2  1
2  3  2
3  4  3
4  5  4

我想把它打印出来,这样它就可以产生简单的代码来重新创建它,例如:

DataFrame([[2,1],[3,2],[4,3],[5,4]],columns=['B','A'],index=[1,2,3,4])

我试着把三个部分(数据、列和行)中的每一个都拉出来:

[[e for e in row] for row in df.iterrows()]
[c for c in df.columns]
[r for r in df.index]

但是第一行失败,因为e不是值而是Series。你知道吗

是否有预构建命令来执行此操作,如果没有,如何执行?谢谢。你知道吗


Tags: columns数据代码in命令dataframedffor
2条回答

基于@Woody Pride的方法,下面是我使用的完整解决方案。它处理层次索引和索引名。你知道吗

from types import MethodType
from pandas import DataFrame, MultiIndex

def _gencmd(df, pandas_as='pd'):
    """
    With this addition to DataFrame's methods, you can use:
        df.command()
    to get the command required to regenerate the dataframe df.
    """
    if pandas_as:
        pandas_as += '.'
    index_cmd = df.index.__class__.__name__
    if type(df.index)==MultiIndex:
        index_cmd += '.from_tuples({0}, names={1})'.format([i for i in df.index], df.index.names)
    else:
        index_cmd += "({0}, name='{1}')".format([i for i in df.index], df.index.name)
    return 'DataFrame({0}, index={1}{2}, columns={3})'.format([[xx for xx in x] for x in df.values],
                                                                pandas_as,
                                                                index_cmd,
                                                                [c for c in df.columns])


DataFrame.command = MethodType(_gencmd, None, DataFrame)

到目前为止,我只在几个案例中进行了测试,希望有一个更通用的解决方案。你知道吗

可以通过调用df.values以数组格式获取数据帧的值:

df = pd.DataFrame([[2,1],[3,2],[4,3],[5,4]],columns=['B','A'],index=[1,2,3,4])
arrays = df.values
cols = df.columns
index = df.index
df2 = pd.DataFrame(arrays, columns = cols, index = index)

相关问题 更多 >