我对此感到困惑...
import pandas as pd
# this works fine
df1 = pd.DataFrame(columns=['A','B'])
# but let's say I have this
df2 = pd.DataFrame([])
# this doesn't work!
df2.columns = ['A','B']
# ValueError: Length mismatch: Expected axis has 0 elements, new values have 2 elements
为什么不起作用?我该怎么办?是做这样的事情的唯一方法吗?
if len(df2.index) == 0:
df2 = pd.DataFrame(columns=['A','B'])
else:
df2.columns = ['A','B']
必须有更优雅的方式。
感谢您的帮助!
有人问为什么要这样做:
df2 = pd.DataFrame([])
原因是实际上我在做这样的事情:
df2 = pd.DataFrame(data)
...数据可能是列表的空列表,但在大多数情况下不是。是的,我可以这样做:
if len(data) > 0:
df2 = pd.DataFrame(data, columns=['A','B'])
else:
df2 = pd.DataFrame(columns=['A','B'])
...但这似乎不是很干燥(当然也不是很简洁)。
如果您有任何问题,请告诉我。谢谢!
这看起来像是熊猫中的虫子。所有这些工作:
pd.DataFrame(columns=['A', 'B'])
pd.DataFrame({}, columns=['A', 'B'])
pd.DataFrame(None, columns=['A', 'B'])
但不是这个:
pd.DataFrame([], columns=['A', 'B'])
在修复之前,我建议这样的事情:
if len(data) == 0: data = None
df2 = pd.DataFrame(data, columns=['A','B'])
要么:
df2 = pd.DataFrame(data if len(data) > 0 else None, columns=['A', 'B'])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句