我正在使用Python中的numpy库将CSV
文件数据导入ndarray
,如下所示:
data = np.genfromtxt('mydata.csv',
delimiter='\,', dtype=None, names=True)
结果提供以下列名:
print(data.dtype.names)
('row_label',
'MyDataColumn1_0',
'MyDataColumn1_1')
原始列名称为:
row_label, My-Data-Column-1.0, My-Data-Column-1.1
似乎NumPy
强制我的列名采用C风格的变量名格式。然而,在许多情况下,我的Python脚本需要根据列名访问列,因此我需要确保列名保持不变。要实现此目的,NumPy
需要保留原始列名称,否则我需要将列名称转换为NumPy
正在使用的格式。
有没有办法在导入期间保留原始列名?
如果没有,是否有一种简单的方法可以转换列标签以使用NumPy
正在使用的格式,最好使用某些NumPy
函数?
答案 0 :(得分:4)
如果设置names=True
,则数据文件的第一行将通过此函数传递:
validate_names = NameValidator(excludelist=excludelist,
deletechars=deletechars,
case_sensitive=case_sensitive,
replace_space=replace_space)
这些是您可以提供的选项:
excludelist : sequence, optional
A list of names to exclude. This list is appended to the default list
['return','file','print']. Excluded names are appended an underscore:
for example, `file` would become `file_`.
deletechars : str, optional
A string combining invalid characters that must be deleted from the
names.
defaultfmt : str, optional
A format used to define default field names, such as "f%i" or "f_%02i".
autostrip : bool, optional
Whether to automatically strip white spaces from the variables.
replace_space : char, optional
Character(s) used in replacement of white spaces in the variables
names. By default, use a '_'.
也许您可以尝试提供自己的deletechars
字符串,这是一个空字符串。但是你最好修改并传递这个:
defaultdeletechars = set("""~!@#$%^&*()-=+~\|]}[{';: /?.>,<""")
只需取出该套装中的句号和减号,然后将其传递给:
np.genfromtxt(..., names=True, deletechars="""~!@#$%^&*()=+~\|]}[{';: /?>,<""")
这是来源: https://github.com/numpy/numpy/blob/master/numpy/lib/_iotools.py#l245