Pandas.DataFrame 中的对象表示
Object representation in Pandas.DataFrame
假设我有以下 class, 'MyClass'.
class MyClass:
def __repr__(self):
return 'Myclass()'
def __str__(self):
return 'Meh'
instances = [MyClass() for i in range(5)]
一些实例被创建并存储在 instances
变量中。现在,我们检查它的内容。
>>> instances
[Myclass(), Myclass(), Myclass(), Myclass(), Myclass()]
表示对象python调用__repr__
方法。但是,当相同的 instances
变量传递给 pandas.DataFrame
时,对象的表示发生变化并且似乎调用了 __str__
方法。
import pandas as pd
df = pd.DataFrame(data=instances)
>>> df
0
0 Meh
1 Meh
2 Meh
3 Meh
4 Meh
为什么对象的表示发生了变化?我可以确定 DataFrame 中使用的表示形式吗?
数据确实存储为对象。似乎 pandas 在显示数据帧时只是调用 __str__
方法(隐式地)。
您可以通过调用来验证:
df[0].map(type)
它为列中的每个元素调用 type
并且 returns:
Out[572]:
0 <class '__main__.MyClass'>
1 <class '__main__.MyClass'>
2 <class '__main__.MyClass'>
3 <class '__main__.MyClass'>
4 <class '__main__.MyClass'>
Name: 0, dtype: object
# likewise you get the the
# representation string of the objects
# with:
df[0].map(repr)
Out[578]:
0 Myclass()
1 Myclass()
2 Myclass()
3 Myclass()
4 Myclass()
Name: my_instances, dtype: object
顺便说一句,如果你想创建一个数据框,其中的列明确包含数据,请使用:
df = pd.DataFrame({'my_instances': instances})
这样,您就指定了一个列名。
假设我有以下 class, 'MyClass'.
class MyClass:
def __repr__(self):
return 'Myclass()'
def __str__(self):
return 'Meh'
instances = [MyClass() for i in range(5)]
一些实例被创建并存储在 instances
变量中。现在,我们检查它的内容。
>>> instances
[Myclass(), Myclass(), Myclass(), Myclass(), Myclass()]
表示对象python调用__repr__
方法。但是,当相同的 instances
变量传递给 pandas.DataFrame
时,对象的表示发生变化并且似乎调用了 __str__
方法。
import pandas as pd
df = pd.DataFrame(data=instances)
>>> df
0
0 Meh
1 Meh
2 Meh
3 Meh
4 Meh
为什么对象的表示发生了变化?我可以确定 DataFrame 中使用的表示形式吗?
数据确实存储为对象。似乎 pandas 在显示数据帧时只是调用 __str__
方法(隐式地)。
您可以通过调用来验证:
df[0].map(type)
它为列中的每个元素调用 type
并且 returns:
Out[572]:
0 <class '__main__.MyClass'>
1 <class '__main__.MyClass'>
2 <class '__main__.MyClass'>
3 <class '__main__.MyClass'>
4 <class '__main__.MyClass'>
Name: 0, dtype: object
# likewise you get the the
# representation string of the objects
# with:
df[0].map(repr)
Out[578]:
0 Myclass()
1 Myclass()
2 Myclass()
3 Myclass()
4 Myclass()
Name: my_instances, dtype: object
顺便说一句,如果你想创建一个数据框,其中的列明确包含数据,请使用:
df = pd.DataFrame({'my_instances': instances})
这样,您就指定了一个列名。