使用pandas导入时忽略字符

时间:2014-05-22 14:56:02

标签: python pandas csv

我在文档中找不到这样的选项。测量设备在Excel中吐出所有内容:

    <>    A    B    C
 1
 2
 3

当我删除&#34;&lt;&gt;&#34;手动字符一切正常。有没有办法规避(不转换为csv)?

我做:

import pandas as pd 
df = pd.read_excel(filename,sheetname,skiprows=0,header=0,index_col=0)
由于pandas使用第一行作为名称,因此

skiprow = 1无法解决问题。如果我提供names = list(range(1, 4)),则第一个数据行将丢失。

5 个答案:

答案 0 :(得分:1)

另一种选择是:

f = open(fname, 'r')
line1 = f.readline()
data1 = pd.read_csv(f, sep='\s+', names=line1.replace(' #', '').split(), dtype=np.float)

您可能有不同的分隔符。

答案 1 :(得分:1)

扩展 Peruz's 答案:-

对于你的情况,使用正则表达式

df = pd.read_csv(filename, sep="(?<!<>)\s+", engine='python')

这应该在列中正确读取,除了第一列将命名为 <> A

要更改此设置,只需更改第一列名称

df.columns = pd.Series(df.columns.str.replace("<>\s", ""))

在正则表达式中,\s+ 匹配任意数量的空格字符,除非前面有 (?<!charceters_to_ignore) 表示的否定环顾中提到的任何内容

答案 2 :(得分:0)

我有同样的问题。我的第一行是:

# id ra dec ...

其中#是Python中的注释字符。 import_csv认为#是列标题,但事实并非如此。 我使用的解决方法是手动定义标头:

headerlist = ['id', 'ra', 'dec', ...]  
df = pd.read_csv('data.txt', index_col=False, header=0, names=headerlist)

请注意index_col对于此问题是可选的。

如果有任何选项可以忽略标题行中的某个字符,我还没有找到它。希望这个解决方案能够得到改进。

答案 3 :(得分:0)

我有同样的问题。我的第一行是

# id x y ...

因此pandas标头关键字不起作用。我通过阅读两次来做到以下几点:

cos_phot_header = pd.read_csv(table, delim_whitespace=True, header=None, engine='python', nrows=1)
cos_plot_text_header = cos_phot_header.drop(0, axis=1).values.tolist()
cos_phot_data = pd.read_csv(table, skip_blank_lines=True, comment='#', 
               delim_whitespace=True, header=None, engine='python', names=cos_plot_text_header[0])

我不明白为什么大熊猫没有这种选择,这是每个人都遇到的非常普遍的问题。您也可以不使用任何行(nrows = 0)读取表并使用.columns,但老实说,我认为这是解决该问题的同样丑陋的方法。

答案 4 :(得分:0)

熊猫read_csv()支持regex。如果在空格前加上一些东西(在您的情况下为#),则可以避免匹配空格。例如,避免使用“!”:

sep='(?<!\\!)\s+'

如果需要,可以重命名该列以删除初始字符和空格。

欢呼