将数据帧清晰地硬编码到python脚本中?
有没有一种干净的方法可以将数据帧硬编码为python代码,例如.py文件 我不想存储在单独的CSV中,我希望脚本文件能够自己运行,并且数据帧不是很大。我还希望在代码中明确它是什么,并且易于修改 例如:将数据帧清晰地硬编码到python脚本中?,python,pandas,dataframe,Python,Pandas,Dataframe,有没有一种干净的方法可以将数据帧硬编码为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]
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)
但是这需要大量的手动格式化,或者编写一个单独的数据框打印机,而且非常难看和粗糙。根据我们的评论提供完整的答案:
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
根据我们的意见提供完整答案:
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
基于字符串文字使用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中使用正则表达式相关的警告
一个更好的版本,允许您使用printdf输出本身作为输入,而无需手动编辑,将是:
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)
基于字符串文字使用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中使用正则表达式相关的警告
一个更好的版本,允许您使用printdf输出本身作为输入,而无需手动编辑,将是:
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)
将csv作为一个文件放入您的文件中string@MadPhysicist在这种情况下,不要忘记使用io.StringIO:@r.ook。是的,您将csv作为string@MadPhysicist在这种情况下,不要忘记使用io.StringIO:@r.ook。是的,我会将数据从StringIO创建中分离出来,并将索引放在开头,就像通常所认为的那样,但是+1没有关系。这非常有效。我还在源数据框上使用了printdf,以便于复制字符串,从而避免了任何手动格式化。@argentum2f好的,让我添加一个版本的解决方案,允许未经编辑的重复使用printdf outputI,它会将数据与StringIO创建分开,并将索引放在开头,就像人们通常认为的那样,但是+1并不重要。这很有效。我还在源数据帧上使用了printdf,以便于复制字符串,从而避免了任何手动格式化。@argentum2f好的,让我添加一个版本的解决方案,允许未经编辑的重复使用printdf输出