我在文档中找不到这样的选项。测量设备在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))
,则第一个数据行将丢失。
答案 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+'
如果需要,可以重命名该列以删除初始字符和空格。
欢呼