在python中 先调用C#的dll 返回了一个类的列表,如何把这个列表转换为 python 中的 DataFrame?
你可以使用`pandas.DataFrame`的构造函数,将类的列表转换成一个包含类属性的字典列表,然后再将这个字典列表作为参数调用`pandas.DataFrame`构造函数。下面是一个示例代码:
假设C#的DLL文件包含一个名为`MyClass`的类,它有三个属性:`name`,`age`和`gender`。我们从DLL文件中调用一个函数`get_data()`,这个函数返回一个`MyClass`类的列表。下面是一个Python代码示例:
```python
import pandas as pd
import ctypes
# 加载DLL文件
mylib = ctypes.cdll.LoadLibrary("MyLibrary.dll")
# 获取get_data函数
get_data_func = mylib.get_data
get_data_func.restype = ctypes.POINTER(ctypes.py_object)
# 调用get_data函数
data_list = get_data_func().contents
# 将类的列表转换为一个字典列表
dict_list = []
for instance in data_list:
dict_list.append({'name': instance.name, 'age': instance.age, 'gender': instance.gender})
# 将字典列表转换为DataFrame
df = pd.DataFrame(dict_list)
```
在上面的代码中,我们首先加载DLL文件并获取`get_data`函数。然后,我们调用`get_data`函数并将返回值存储在`data_list`中。接下来,我们遍历`data_list`列表并将`MyClass`类的属性和值作为键值对添加到一个字典中,然后将这个字典添加到`dict_list`列表中。最后,我们将`dict_list`传递给`pandas.DataFrame`构造函数,将其转换为一个DataFrame对象。
import pandas as pd from ctypes import cdll, c_double, c_char_p dll = cdll.LoadLibrary('my_dll.dll') # 替换成实际的 DLL 文件名 # 调用 C# DLL 的函数,返回一个列表 my_class_list = dll.my_function() # 将列表转换为字典 dict_list = [] for my_class in my_class_list: dict_list.append(vars(my_class)) # 将字典列表转换为 DataFrame df = pd.DataFrame(dict_list)