熊猫版本:1.03 Python版本:2.7.17、3.7.3 Chromebook-Debian Buster
python新手,但我甚至找不到关于这种行为的问题。我有一个作为JSON从GoogleAPI接收的地址,我将它解析成一个dictionary对象,然后在创建数据帧后写入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行数据,但数据框的创建似乎添加了一个空键和一个空值,因此数据框包含17行,而不是我期望的16行
我包括一个测试文件,它只是用数据填充dict,然后将键和值传递到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中…或者是吗
我认为我在创建字典时做错了什么,所以我只是做了一个测试,使用两个可接受的方法初始化了两个dict对象,一个是空的,另一个是添加数据的。两人都在转储程序输出中报告了这个奇怪的“无”,我通常只是假设它是某种默认行为指示器(默认为空列值或其他内容),但熊猫显然将它视为一个真实的列,如果我的侦查发现了一些非常重要的内容
#!/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))
以下是输出:(我问的是什么对象类型,因为转储程序输出在我看来就像是以字符串形式报告对象—“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对象固有的,熊猫只是想尽可能地利用它。有人知道我如何在不返回并从csv中删除伪行的情况下防止它吗?(,0)在输出数据帧内容之后
这在Python2.7.17中的作用与在3.7.3中的作用相同,因此这似乎不是Python的问题,而是pandas的问题
注:我想pandas可能会选择一个额外的行,以便验证dict只有16行,我添加了对dict.keys()和dict.values()的调用,以查看我是否向dict添加了在其中一个调用中返回的内容,但dict似乎没有正确地返回键和值。熊猫正在创造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
这是熊猫虫还是我做错了什么
TLDR:这不是一个bug,你看到的是一个pd.Series名称。所有系列都有它,因为您没有提供一个,pandas会使用autoincrement自动分配它
pd.DataFrame
中的列和行都是pd.Series
。您向构造函数传递了值和索引,但没有传递列,因此默认名称用于命名列系列(即自动增量)。您可以手动指定列名,例如:或者,如果您总是解析单个值的一个dict,只需生成一个序列:
如果您检查数据帧的长度,它将与dict长度相同
相关问题 更多 >
编程相关推荐