这可能是您需要的基本方法,尽管我不知道它可能证明是多么的资源匮乏。
import petl as etl
import pandas as pd
table = etl.frompickle('temp.pickle')
print (table)
dtypes = {}
for fieldName in table.fieldnames():
typeset = [_ for _ in list(etl.typeset(table, fieldName)) if _ != 'NoneType']
if len(typeset) > 1:
print ('Warning: more than one type found, using convenient value found')
dtypes[fieldName]=typeset[0]
cols = etl.columns(table)
first = True
for fieldname in table.fieldnames():
if first:
df = pd.DataFrame.from_dict({fieldname: cols[fieldname]}, dtype=dtypes[fieldname])
first = False
else:
column = pd.DataFrame.from_dict({fieldname: cols[fieldname]}, dtype=dtypes[fieldname])
df = df.join(column)
print (df)
这是您的示例的输出,稍作修改。
+-----+------+------+-------+
| cis | boom | bah | bish |
+=====+======+======+=======+
| A | 1 | None | True |
+-----+------+------+-------+
| B | None | 1.0 | False |
+-----+------+------+-------+
| C | 11 | None | False |
+-----+------+------+-------+
cis boom bah bish
0 A 1 NaN True
1 B None 1.0 False
2 C 11 NaN False
我省略了一个整数值(对于“boom”),因为整数没有 NaN,我想学习如何处理这个问题。我不清楚 numpy 的答案可能是什么——有些答案看起来很丑——所以我避免了它。如果没有 dtype 的声明 pandas 会将繁荣转换为浮动。这就是为什么我包含了练习 petl 排版内容的代码。这是一个非常基本的方法。如果您有包含整数和浮点值的列,那么您可能希望扩展它,以便选择浮点而不是整数类型并传递给熊猫。