将数据帧清晰地硬编码到python脚本中?

2024-04-25 03:46:00 发布

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

有没有一个好的干净的方法将数据帧硬编码成python代码(例如.py文件)?你知道吗

我不想存储在单独的CSV中(我希望脚本文件能够自己运行),而且数据帧不是很大。我也希望它在代码中是什么,很容易修改清楚。你知道吗

例如:

    cols = ['val1', 'val2', 'val3']
    rows = ['red', 'blue', 'green','orange','pink']
    data = [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0], [10.0,11.0,12.0],[13.0, 14.0,15.0]]
    pd.DataFrame(data, index=rows, columns=cols)

这是可行的,但是如果您想修改green val2,那么很难立即找到正确的值。稍微好一点(在某些方面):

    cols = ['val1', 'val2', 'val3']
    rows = ['red', 'blue', 'green','orange','pink']
    data = [
    #  val1,  val2, val3
        [1.0, 2.0, 3.0],   # red
        [4.0, 5.0, 6.0],   # blue
        [7.0, 8.0, 9.0],   # green
        [10.0,11.0,12.0],  # orange
        [13.0, 14.0,15.0]] # pink
    pd.DataFrame(data, index=rows, columns=cols)

但这需要大量的手动格式化,或者编写一个单独的数据帧打印机,而且很难看,很有黑客味。你知道吗


Tags: 文件数据代码datagreenblueredrows
2条回答

基于字符串文字使用pd.read_csv

try: from io import StringIO  # Python 3
except: from StringIO import StringIO  # Python 2

import pandas as pd

TESTDATA = u"""\
    val1, val2, val3,   color
     1.0,  2.0,  3.0,   red
     4.0,  5.0,  6.0,   blue
     7.0,  8.0,  9.0,   green
    10.0, 11.0, 12.0,   orange
    13.0, 14.0, 15.0,   pink
"""

df = pd.read_csv(StringIO(TESTDATA), index_col=-1, sep=r",\s*", engine='python')
print(df)

# prints:
#         val1  val2  val3
# color                   
# red      1.0   2.0   3.0
# blue     4.0   5.0   6.0
# green    7.0   8.0   9.0
# orange  10.0  11.0  12.0
# pink    13.0  14.0  15.0

sep中包含\s*意味着您可以使用选项将数据格式化为空白。既然你说数据帧不是很大,为了可读性,为什么不这么做呢?但是,如果您不喜欢手动对齐内容,即使是对于一个小的数据帧,您也可以删除空格并将原始CSV内容粘贴到TESTDATA。然后可以从sep中删除\s*,并删除engine='python'(后者仅用于抑制与在sep中使用正则表达式相关的警告)。你知道吗

一个更好的版本允许您使用print(df)输出本身作为输入,而无需手动编辑,它是:

try: from io import StringIO  # Python 3
except: from StringIO import StringIO  # Python 2

import pandas as pd 

TESTDATA = u"""\
            val1  val2  val3
    color                   
    red      1.0   2.0   3.0
    blue     4.0   5.0   6.0
    green    7.0   8.0   9.0
    orange  10.0  11.0  12.0
    pink    13.0  14.0  15.0
"""

df = pd.read_csv(StringIO(TESTDATA), index_col=0, sep=r"\s+", engine='python')
print(df)

根据我们的意见提供完整答案:

from io import StringIO

data = """
col1,col2,col3
a,b,c
d,e,f
"""

s = StringIO(data)
df = pd.read_csv(s)

结果:

  col1 col2 col3
0    a    b    c
1    d    e    f

相关问题 更多 >