我将尝试通过示例DataFrame来说明我的问题:
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")
example_string然后看起来像这样...
"|| col1 || col2 || col3 ||\n| a | 1 | 2 |\n| b | 3 | 4 |\n| c | 5 | 6 |"
所以我的问题是-如何将这个字符串转换回pandas DataFrame?
答案 0 :(得分:3)
pandas
与StringIO
一起使用, pd.read_csv
可以解析一个字符串。
此处最大的问题是,列标签的分隔符('||'
)与数据('|'
)的分隔符不同,并且表周围还有一个附加的'|'
。为了解决这个问题,我们将分别读取标头和数据,然后将它们组合成一个DataFrame。 .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())
print(data)
col1 col2 col3
0 a 1 2
1 b 3 4
2 c 5 6
上述内容的一个问题是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