我正在尝试从一个字典(mainDict)创建一个polars数据框,其中mainDict的一个值是一个包含字典对象(nestedDicts)的列表。当我尝试执行此操作时,会出现错误(见下文),我不知道其含义。但是,pandas确实允许我使用mainDict创建数据框。
我不确定自己是否做错了什么,这是否是一个bug,或者polars是否根本不支持这种操作。如果可能的话,我想用这种方式来实现它,但是我不太担心找到解决方法(欢迎提供建议)。
我在google colab上使用的是polars版本0.13.38(在VScode上也会出现问题),python版本为3.9.6,操作系统为windows 10。以下是重现问题及其输出的代码示例。谢谢!
输入:
我不确定自己是否做错了什么,这是否是一个bug,或者polars是否根本不支持这种操作。如果可能的话,我想用这种方式来实现它,但是我不太担心找到解决方法(欢迎提供建议)。
我在google colab上使用的是polars版本0.13.38(在VScode上也会出现问题),python版本为3.9.6,操作系统为windows 10。以下是重现问题及其输出的代码示例。谢谢!
输入:
import polars as pl
import pandas as pd
template = { 'a':['A', 'AA'],
'b':['B', 'BB'],
'c':['C', 'CC'],
'd':[{'D1':'D2'}, {'DD1':'DD2'}]}
#create a dataframe using pandas
df_pandas = pd.DataFrame(template)
print(df_pandas)
#create a dataframe using polars
df_polars = pl.DataFrame(template)
print(df_polars)
输出:
a b c d
0 A B C {'D1': 'D2'}
1 AA BB CC {'DD1': 'DD2'}
---------------------------------------------------------------------------
ComputeError Traceback (most recent call last)
<ipython-input-9-2abdc86d91da> in <module>()
12
13 #create a dataframe using polars
---> 14 df_polars = pl.DataFrame(template)
15 print(df_polars)
3 frames
/usr/local/lib/python3.7/dist-packages/polars/internals/frame.py in __init__(self, data, columns, orient)
300
301 elif isinstance(data, dict):
--> 302 self._df = dict_to_pydf(data, columns=columns)
303
304 elif isinstance(data, np.ndarray):
/usr/local/lib/python3.7/dist-packages/polars/internals/construction.py in dict_to_pydf(data, columns)
400 return PyDataFrame(data_series)
401 # fast path
--> 402 return PyDataFrame.read_dict(data)
403
404
/usr/local/lib/python3.7/dist-packages/polars/internals/series.py in __init__(self, name, values, dtype, strict, nan_to_null)
225 self._s = self.cast(dtype, strict=True)._s
226 elif isinstance(values, Sequence):
--> 227 self._s = sequence_to_pyseries(name, values, dtype=dtype, strict=strict)
228 elif _PANDAS_AVAILABLE and isinstance(values, (pd.Series, pd.DatetimeIndex)):
229 self._s = pandas_to_pyseries(name, values)
/usr/local/lib/python3.7/dist-packages/polars/internals/construction.py in sequence_to_pyseries(name, values, dtype, strict)
241 if constructor == PySeries.new_object:
242 try:
--> 243 return PySeries.new_from_anyvalues(name, values)
244 # raised if we cannot convert to Wrap<AnyValue>
245 except RuntimeError:
ComputeError: struct orders must remain the same