Python 转换为';制表';数据帧的字符串返回到数据帧中
我将尝试用一个示例数据帧来说明我的问题:Python 转换为';制表';数据帧的字符串返回到数据帧中,python,pandas,Python,Pandas,我将尝试用一个示例数据帧来说明我的问题: import pandas as pd example_df = pd.DataFrame([['a',1,2],['b',3,4],['c',5,6]], columns = ['col1', 'col2', 'col3']) 现在我将这个数据帧转换成一个列表字符串,如下所示 from tabulate import tabulate example_string = tabulate(example_df, headers=list(example
import pandas as pd
example_df = pd.DataFrame([['a',1,2],['b',3,4],['c',5,6]], columns = ['col1', 'col2', 'col3'])
现在我将这个数据帧转换成一个列表字符串,如下所示
from tabulate import tabulate
example_string = tabulate(example_df, headers=list(example_df.columns), tablefmt='jira', showindex="never")
示例\u字符串如下所示
"|| col1 || col2 || col3 ||\n| a | 1 | 2 |\n| b | 3 | 4 |\n| c | 5 | 6 |"
所以我的问题是-如何将此字符串转换回pandas数据帧?
pandas
如果将StringIO
与pd.read\u csv
一起使用,则可以解析字符串
这里最大的问题是,列标签的分隔符(“| |”
)与数据(“|”
)不同,表的周围还有一个额外的“”
。为了解决这个问题,我们将分别读取报头和数据,然后将它们组合成一个数据帧。.dropna
删除由表格边框'|'
import pandas as pd
from io import StringIO
header = (pd.read_csv(StringIO(example_string), sep=r'\|\|', engine='python',
nrows=1, header=None)
.dropna(how='all', axis=1))
data = (pd.read_csv(StringIO(example_string), sep=r'\|', engine='python',
skiprows=1, header=None)
.dropna(how='all', axis=1))
# Replace data's RangeIndex with column labels.
data.columns = data.columns.map(header.T[0].str.strip().to_dict())
上面提到的一个问题是
object
列仍然有所有额外的空格。例如,您需要去除'col1'
。数字列正确地进行了类型转换。这是一个简单的解决方案:
for col in data.select_dtypes('O'):
data[col] = data[col].str.strip()
print(data)
col1 col2 col3
0 a 1 2
1 b 3 4
2 c 5 6
谢谢你的帮助,我成功地将这个例子应用到我的工作中。将StringIO与read_csv结合使用才是真正的关键!
for col in data.select_dtypes('O'):
data[col] = data[col].str.strip()
print(data)
col1 col2 col3
0 a 1 2
1 b 3 4
2 c 5 6