繁体   English   中英

从 dataframe 名称中删除特殊字符

[英]Remove special characters from dataframe names

在 Python 中,我正在阅读一个包含多张纸的 excel 文件,目的是每张纸都是它自己的 dataframe:

df = pd.read_excel('Book1.xlsx', sheet_name=None)

因此,要获取每个 dataframe(或工作表)的字典键,我可以使用: df.keys()它为我提供原始 Excel 文件中的每个工作表名称: dict_keys(['GF-1', 'H_2 S-Z', 'GB-SF+NZ'])

然后我可以使用以下方法将每个字典分配到它自己的 dataframe 中:

for key in df.keys():
    globals()[key] = df[key]

但是,因为原始 Excel 文件中的工作表名称包含特殊字符(-、空格、+ 等),所以我无法单独调用任何数据帧:

H_2 S-Z.head()
        ^
SyntaxError: invalid syntax

我知道 dataframe 'names' 不能包含特殊字符或以数字开头等,那么如何删除这些特殊字符? 我不认为可以编辑dict_keys (例如使用正则表达式)。 还考虑过创建数据帧列表,然后可能执行正则表达式 for 循环以遍历每个 dataframe 名称,但不确定它是否会将“新”dataframe 名称分配回每个 dataframe。

谁能帮我?

您可以将re.subdictcomp一起使用以去除字符(-、+、空格、..):

import re

dict_dfs = pd.read_excel("Book1.xlsx", sheet_name=None)

dict_dfs = {re.sub(r"[-+\s]", "_", k): v for k,v in dict_dfs.items()} 

for key in dict_dfs.keys():
    globals()[key] = dict_dfs[key]

正如@cottontail 所建议的,您也可以使用re.sub(r"\W", "_", k)

注意:结果(在全局 scope 中),您将拥有与 Excel 文件中的工作表一样多的变量( pandas.core.frame.DataFrame对象)。

print([(var, type(val)) for var, val in globals().items()
       if type(val) == pd.core.frame.DataFrame])

#[('GF-1', pandas.core.frame.DataFrame),
# ('H_2_S_Z', pandas.core.frame.DataFrame),
# ('GB_SF_NZ', pandas.core.frame.DataFrame)]

globals()已经是一本字典(您可以通过isinstance(globals(), dict)确认),因此可以将各个工作表作为任何字典值进行访问:

globals()['H_2 S-Z'].head()

等等

也就是说,与其创建单独命名的数据框,我认为将工作表作为数据框存储在单个字典中可能对您来说更具可读性和可访问性。 鉴于您不能使用与工作表名称相同的名称来命名数据框,它已经产生了问题。 如果您更改 dataframe 名称,那么您将需要另一个映射来告诉您哪个工作表名称对应于哪个 dataframe 名称,因此需要大量工作。 由于您已经在df中拥有数据框字典,为什么不通过df['H_2 S-Z']等访问各个工作表?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM