如何将字节数据转换为 python pandas 数据框?
Posted
技术标签:
【中文标题】如何将字节数据转换为 python pandas 数据框?【英文标题】:How to convert bytes data into a python pandas dataframe? 【发布时间】:2018-05-02 22:22:15 【问题描述】:我想将“字节”数据转换为 Pandas 数据框。
数据如下所示(前几行):
(b'#Settlement Date,Settlement Period,CCGT,OIL,COAL,NUCLEAR,WIND,PS,NPSHYD,OCGT'
b',OTHER,INTFR,INTIRL,INTNED,INTEW,BIOMASS\n2017-01-01,1,7727,0,3815,7404,3'
b'923,0,944,0,2123,948,296,856,238,\n2017-01-01,2,8338,0,3815,7403,3658,16,'
b'909,0,2124,998,298,874,288,\n2017-01-01,3,7927,0,3801,7408,3925,0,864,0,2'
b'122,998,298,816,286,\n2017-01-01,4,6996,0,3803,7407,4393,0,863,0,2122,998'
列标题显示在顶部。随后的每一行都是一个时间戳和数字。
有没有直接的方法来做到这一点?
非常感谢
@Paula Livingstone:
这似乎有效:
s=str(bytes_data,'utf-8')
file = open("data.txt","w")
file.write(s)
df=pd.read_csv('data.txt')
也许这可以在不使用中间文件的情况下完成。
【问题讨论】:
【参考方案1】:我遇到了同样的问题,并从这里的答案中找到了这个库https://docs.python.org/2/library/stringio.html:How to create a Pandas DataFrame from a string
尝试类似:
from io import StringIO
s=str(bytes_data,'utf-8')
data = StringIO(s)
df=pd.read_csv(data)
【讨论】:
如果您从子流程模块获得bytes
,那么s = subprocess.check_output(['docker', 'images']) s1=str(s,'utf-8') data = pd.read_fwf(StringIO(s1))
可能会有所帮助【参考方案2】:
你也可以直接使用BytesIO
:
from io import BytesIO
df = pd.read_csv(BytesIO(bytes_data))
这将为您省去将bytes_data
转换为字符串的步骤
【讨论】:
【参考方案3】:好的,很酷,您的输入格式很尴尬,但以下方法有效:
with open('file.txt', 'r') as myfile:
data=myfile.read().replace('\n', '') #read in file as a string
df = pd.Series(" ".join(data.strip(' b\'').strip('\'').split('\' b\'')).split('\\n')).str.split(',', expand=True)
print(df)
这会产生以下结果:
0 1 2 3 4 5 6 7 \
0 #Settlement Date Settlement Period CCGT OIL COAL NUCLEAR WIND PS
1 2017-01-01 1 7727 0 3815 7404 3923 0
2 2017-01-01 2 8338 0 3815 7403 3658 16
3 2017-01-01 3 7927 0 3801 7408 3925 0
8 9 10 11 12 13 14 15
0 NPSHYD OCGT OTHER INTFR INTIRL INTNED INTEW BIOMASS
1 944 0 2123 948 296 856 238
2 909 0 2124 998 298 874 288
3 864 0 2122 998 298 816 286 None
为了使其工作,您需要确保您的输入文件仅包含完整行的集合。出于这个原因,出于测试的目的,我删除了部分行。
正如您所说,数据源是一个 http GET 请求,那么初始读取将使用 pandas.read_html
进行。
更多详情请见here。请特别注意有关 io 的部分(io : str 或类似文件)。
【讨论】:
谢谢。我的输入不是来自文件。我将文件创建为中间步骤,但我想完全避免使用文件。 通过 API 从 HTTP 请求中查询,我以问题中显示的字节格式获取它以上是关于如何将字节数据转换为 python pandas 数据框?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 pandas 数据框列转换为本机 python 数据类型?
如何在python中使用pandas将字典列表转换为数据框[重复]