【发布时间】:2020-05-12 21:40:42
【问题描述】:
熊猫版本:1.03 Python 版本:2.7.17、3.7.3 Chromebook - Debian Buster
python 新手,但我什至找不到关于这种行为的问题。我有一个地址,我从谷歌 API 接收为 JSON,我将其解析为字典对象,然后在创建 pandas DataFrame 后写入 csv 文件。 (我不包括从 JSON 转换为 dict 的代码,但如果没有转换,这将是如何完成的。)
add = {'street': 'Farm to Market 369', 'state': 'Texas', 'city': 'Iowa Park', 'county': 'Wichita County', 'country': 'United States', 'postal_code': '76367', 'neighborhood': None, 'sublocality': None, 'housenumber': None, 'postal_town': None, 'subpremise': None, 'latitude': 33.9738616, 'longitude': -98.5964961, 'location_type': 'ROOFTOP', 'postal_code_suffix': None, 'street_number': '2101'}
有 16 行数据,但数据框的创建似乎添加了一个空键和一个空值,因此 DataFrame 包含 17 行,而不是我期望的 16 行。
我包含一个测试文件,它只是用数据填充字典,然后将键和值传递到 pandas.df。查看表格输出。
#!/usr/bin/env python3
import pandas as pd
import dumper
def writeAddressCsv(unitName,add):
#sv_file_path = dataDir+unitName+"_address.csv"
print (dumper.dump(add))
df=pd.DataFrame(add.values(),add.keys())
print(df)
exit(0)
#try:
# export_csv = df.to_csv(csv_file_path)
#except:
# print("failed to save address to " + csv_file_path)
add = {"street": "Farm to Market 369", "state": "Texas", "city": "Iowa Park", "county": "Wichita County", "country": "United States", "postal_code": "76367", "neighborhood": None, "sublocality": None, "housenumber": None, "postal_town": None, "subpremise": None, "latitude": 33.9738616, "longitude": -98.5964961, "location_type": "ROOFTOP", "postal_code_suffix": None, "street_number": "2101"}
writeAddressCsv("foo",add)
0 <-----------(null key and 'None' (null) value???)
street Farm to Market 369
state Texas
city Iowa Park
county Wichita County
country United States
postal_code 76367
neighborhood None
sublocality None
housenumber None
postal_town None
subpremise None
latitude 33.9739
longitude -98.5965
location_type ROOFTOP
postal_code_suffix None
street_number 2101
那个空键不在字典中......或者是吗?
我以为我在创建字典时做错了什么,所以我只是做了一个测试,使用两种可接受的方法初始化两个 dict 对象,一个是空的,一个是我添加数据的方法。两者都在转储程序输出中报告了这个奇怪的“无”,我通常假设它是某种默认行为指示器(默认为空列值或其他东西),但如果我的侦查发现了一些东西,pandas 显然将它视为一个真实的列很重要。
#!/usr/bin/env python3
import dumper
finaldict = dict()
finaldict2 = {"test": "foo","test2":"foo2"}
print ('finaldict is a: ' + str(type(finaldict)))
print ('finaldict2 is a: ' + str(type(finaldict2)))
print (dumper.dump(finaldict))
print (dumper.dump(finaldict2))
这是输出:(我在问什么对象类型,因为在我看来,dumper 输出看起来像是将对象报告为字符串 - 'str at xxxx')。
finaldict is a: <class 'dict'>
finaldict2 is a: <class 'dict'>
<str at 0x79ce5dcb58>: '{}'None <------- wtf mate?
<str at 0x79ce4acce8>: "{'test': 'foo', 'test2': 'foo2'}"None <-------- wtf mate?
显然,这个“东西”是 dict 对象所固有的,pandas 只是想尽其所能。有谁知道我如何在不返回并从我的 csv 中删除虚假行的情况下防止它? ( ,0) 数据帧内容输出后?
这在 Python 2.7.17 中的作用与在 3.7.3 中的作用相同,因此这似乎不是 python 的问题,而是 pandas 的问题。
PS.:我想也许 pandas 会增加一行,所以为了验证 dict 是否只有 16 行,我添加了对 dict.keys() 和 dict.values() 的调用,以查看我是否添加了一些东西到它在其中一个调用中返回的字典,但没有字典似乎正确返回键和值。 Pandas 正在创造 17!
Number of Keys: 16
dict_keys(['street', 'state', 'city', 'county', 'country', 'postal_code', 'neighborhood', 'sublocality', 'housenumber', 'postal_town', 'subpremise', 'latitude', 'longitude', 'location_type', 'postal_code_suffix', 'street_number'])
Number of values: 16
dict_values(['Farm to Market 369', 'Texas', 'Iowa Park', 'Wichita County', 'United States', '76367', None, None, None, None, None, 33.9738616, -98.5964961, 'ROOFTOP', None, '2101'])
PSS:
这可能是相关的,但没有答案。
Pandas adding extra row to DataFrame when assigning index
这是熊猫错误还是我做错了什么?
【问题讨论】:
标签: python pandas dictionary