我在阅读从Google广告关键字规划工具下载的文件时遇到了一些问题。如果我从这个工具(不是API而是GUI)下载任何文件,我会得到一个基本的制表符分隔的CSV文件,如下所示(在记事本中打开时)。
Keyword Stats 2019-03-01 at 14_08_25
"February 1, 2018 - January 31, 2019"
Keyword Currency Avg. monthly searches Min search volume Max search volume Competition Competition (indexed value) Top of page bid (low range) Top of page bid (high range) Ad impression share Organic impression share Organic average position In account? In plan? Searches: Feb 2018 Searches: Mar 2018 Searches: Apr 2018 Searches: May 2018 Searches: Jun 2018 Searches: Jul 2018 Searches: Aug 2018 Searches: Sep 2018 Searches: Oct 2018 Searches: Nov 2018 Searches: Dec 2018 Searches: Jan 2019
Women Fashion Plus Sizes USD N/A 0 10 Unknown
plus size women USD N/A "10,000" "100,000" High 100 0.88 2.51
Large Fashionable Clothing USD N/A 0 10 Unknown
plus size clothing USD N/A "100,000" "1,000,000" High 100 1.02 2.79
plus size dresses USD N/A "100,000" "1,000,000" High 100 0.67 1.79
这个文件也可以用excel打开。
但是,如果我使用以下代码使用Pandas读取文件:
df = pd.read_csv(file, skiprows = 10, header = 0, sep = '\t')
创建一个完全为空的数据框(所有南方和未命名的标题),但具有正确的行数和26列。
如果我只是打开并阅读该文件,我会得到一大堆非常奇怪的(很多x00)看起来unicode,这看起来似乎并不等同于任何东西。
open(file).readlines()
>>> '\x00p\x00l\x00u\x00s\x00 \x00s\x00i\x00z\x00e\x00 \x00o\x00u\x00t\x00f\x00i\x00t\x00 \x00i\x00d\x00e\x00a\x00s\x00 \x00f\x00o\x00r\x00 \x00s\x00u\x00m\x00m\x00e\x00r\x00\t\x00U\x00S\x00D\x00\t\x00N\x00/\x00A\x00\t\x001\x000\x000\x00\t\x00"\x001\x00,\x000\x000\x000\x00"\x00\t\x00H\x00i\x00g\x00h\x00\t\x001\x000\x000\x00\t\x000\x00.\x005\x008\x00\t\x005\x00.\x006\x002\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\n',
"\x00w\x00o\x00m\x00e\x00n\x00'\x00s\x00 \x00p\x00l\x00u\x00s\x00 \x00s\x00i\x00z\x00e\x00 \x00b\x00o\x00u\x00t\x00i\x00q\x00u\x00e\x00 \x00c\x00l\x00o\x00t\x00h\x00i\x00n\x00g\x00 \x00o\x00n\x00l\x00i\x00n\x00e\x00\t\x00U\x00S\x00D\x00\t\x00N\x00/\x00A\x00\t\x001\x000\x00\t\x001\x000\x000\x00\t\x00H\x00i\x00g\x00h\x00\t\x009\x007\x00\t\x000\x00.\x005\x001\x00\t\x008\x00.\x009\x003\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\n",
'\x00w\x00o\x00m\x00e\x00n\x00s\x00 \x00p\x00l\x00u\x00s\x00 \x00s\x00i\x00z\x00e\x00 \x00s\x00t\x00o\x00r\x00e\x00\t\x00U\x00S\x00D\x00\t\x00N\x00/\x00A\x00\t\x001\x000\x00\t\x001\x000\x000\x00\t\x00H\x00i\x00g\x00h\x00\t\x009\x007\x00\t\x000\x00.\x006\x002\x00\t\x001\x00.\x005\x005\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\n',
'\x00b\x00e\x00s\x00t\x00 \x00p\x00l\x00u\x00s\x00 \x00s\x00i\x00z\x00e\x00 \x00b\x00r\x00a\x00n\x00d\x00s\x00\t\x00U\x00S\x00D\x00\t\x00N\x00/\x00A\x00\t\x001\x000\x000\x00\t\x00"\x001\x00,\x000\x000\x000\x00"\x00\t\x00L\x00o\x00w\x00\t\x002\x003\x00\t\x001\x00.\x002\x003\x00\t\x007\x00.\x000\x005\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\n',
'\x00g\x00r\x00e\x00a\x00t\x00 \x00p\x00l\x00u\x00s\x00 \x00s\x00i\x00z\x00e\x00 \x00d\x00r\x00e\x00s\x00s\x00e\x00s\x00\t\x00U\x00S\x00D\x00\t\x00N\x00/\x00A\x00\t\x001\x000\x00\t\x001\x000\x000\x00\t\x00H\x00i\x00g\x00h\x00\t\x001\x000\x000\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\n',
'\x00l\x00o\x00o\x00k\x00i\x00n\x00g\x00 \x00f\x00o\x00r\x00 \x00p\x00l\x00u\x00s\x00 \x00s\x00i\x00z\x00e\x00 \x00d\x00r\x00e\x00s\x00s\x00e\x00s\x00\t\x00U\x00S\x00D\x00\t\x00N\x00/\x00A\x00\t\x001\x000\x00\t\x001\x000\x000\x00\t\x00H\x00i\x00g\x00h\x00\t\x001\x000\x000\x00\t\x000\x00.\x005\x009\x00\t\x001\x00.\x008\x001\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\n',
'\x00a\x00m\x00e\x00r\x00i\x00c\x00a\x00n\x00 \x00p\x00l\x00u\x00s\x00 \x00s\x00i\x00z\x00e\x00 \x00c\x00l\x00o\x00t\x00h\x00i\x00n\x00g\x00 \x00o\x00n\x00l\x00i\x00n\x00e\x00\t\x00U\x00S\x00D\x00\t\x00N\x00/\x00A\x00\t\x001\x000\x00\t\x001\x000\x000\x00\t\x00U\x00n\x00k\x00n\x00o\x00w\x00n\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\t\x00\n',
...]
我尝试了许多不同的编码无济于事。
想法?
感谢您的帮助!
下载的CSV文件采用big-endian UTF-16编码。我认为Adwords这样做是为了确保与Microsoft Excel的兼容性。
df = pd.read_csv(file, skiprows = 10, header = 0, sep = '\t', encoding='utf_16_be')
应该给出预期的结果。