python - 如何从打印的数据帧字符串中加载数据帧?
问题描述
人们经常用 print(dataframe) 的输出在 Stack Overflow 上提问。如果有一种方法可以将数据帧数据快速加载到pandas.dataframe
对象中,那将很方便。
从数据帧字符串(可能或可能不正确格式化)加载数据帧的最建议方法是什么?
示例-1
如果要将以下字符串加载为数据框,您会怎么做?
# Dummy Data
s1 = """
Client NumberOfProducts ID
A 1 2
A 5 1
B 1 2
B 6 1
C 9 1
"""
示例 2
这种类型更类似于您在csv
文件中找到的类型。
# Dummy Data
s2 = """
Client, NumberOfProducts, ID
A, 1, 2
A, 5, 1
B, 1, 2
B, 6, 1
C, 9, 1
"""
预期产出
参考
注意:以下两个链接不涉及Example-1中提出的具体情况。我认为我的问题不是重复的原因是我认为无法使用已经发布在这些链接上的任何解决方案(在撰写本文时) 加载示例 1中的字符串。
从字符串创建 Pandas DataFrame。请注意
pd.read_csv(StringIO(s1), sep)
,正如此处建议的那样,它实际上不适用于Example-1。你得到以下输出。
这个问题被标记为两个 Stack Overflow 链接的副本。其中之一是上述的,它未能解决示例 1中提出的情况。第二个是。在那里提供的所有答案中,只有一个看起来可能适用于Example-1,但它不起作用。
# could not read the clipboard and threw error
pd.read_clipboard(sep='\s\s+')
抛出的错误:
PyperclipException:
Pyperclip could not find a copy/paste mechanism for your system.
For more information, please visit https://pyperclip.readthedocs.org
解决方案
我可以建议两种方法来解决这个问题。
方法一
regex
使用和处理字符串numpy
以制作数据框。我所看到的是,这在大多数情况下都有效。这将适用于“示例 1”中介绍的情况。
# Make Dataframe
import pandas as pd
import numpy as np
import re
# Make Dataframe
# s = s1
ncols = 3 # number_of_columns
ss = re.sub('\s+',',',s.strip())
sa = np.array(ss.split(',')).reshape(-1,ncols)
df = pd.DataFrame(dict((k,v) for k,v in zip(sa[0,:], sa[1:,].T)))
df
方法二
用于io.StringIO
喂入pandas.read_csv()
. 但如果分隔符定义明确,这将起作用。例如,如果您的数据看起来类似于“Example-2”。来源信用
import pandas as pd
from io import StringIO
# Make Dataframe
# s = s2
df = pd.read_csv(StringIO(s), sep=',')
输出
推荐阅读
- apache-spark - Kafka 中的 Spark 偏移管理
- reactjs - React:动态导入 css
- laravel - Laravel - 没有发件人地址无法发送消息
- delphi - 无法在应用程序服务器 delphi 的 DLL 中调试数据模块
- r - 将统计测试与 rstatix 和每个类别的颜色填充相结合
- python-3.x - 比较列表中的列表
- java - 如何在 ARCore 中提高预览相机质量
- javascript - 与 javascript "document.getElementById" 函数反应状态冲突
- python-3.x - 如何以 root 身份运行 jupyterlab 笔记本?
- c# - C# ASP.NET、ADFS 在哪里设置被动端点?