我试图将.mat文件转换为pandas DataFrame,但.mat文件的结构使其难以解开。目前,DataFrame看起来像这样
A
2008-01-02 [1]
2008-01-03 [2]
2008-01-04 [3]
2008-01-07 [4]
2008-01-08 [5]
看起来每列中包含的值都包含在它们自己的数组中? .dtype是返回对象。我最终想要聚合我的列,但由于它们不是数字我不能执行数字函数调用。有关如何在保留DataFrame结构的同时从数组结构中删除值的任何想法?
答案 0 :(得分:1)
如果我理解正确,每个条目都是一个包含在Python列表中的元素,并且您希望将该元素从列表中取出,以便每个条目都是标量。
您可以使用df.applymap
功能实现此目的。请注意,此函数适用于整个数据框
df = df.applymap(lambda x: x[0]) # If same operation is to be used on all columns
如果您只想对某些列执行转换,则可以改为使用series.map
:
for some columns:
df['column name'] = df['column name'].map(lambda x: x[0])
在任何一种情况下,您可能必须事后更改列的dtype
才能使用它们;从列表更改为单个元素,可以保留列的object dtype
。如果是这种情况,您可以使用:
df['column name'] = df['column name'].astype([new type])
答案 1 :(得分:0)
您可以使用this issue方法对数据框的列应用操作。
您需要定义function
,然后将其传递给apply
方法,具体取决于object
的类型。例如,如果它是一个列表,您可能想要选择第一个项目,如果它是一个字符串,您可能想要提取并转换该数字。
答案 2 :(得分:0)
这似乎有效
df = pd.DataFrame(data)
unnested_lst = []
for col in df.columns:
unnested_lst.append(df[col].apply(pd.Series).stack())
result = pd.concat(unnested_lst, axis=1, keys=df.columns)
result
A
2008-01-02 0 1
2008-01-03 0 2
2008-01-04 0 3
2008-01-07 0 4
2008-01-08 0 5
不确定如何删除零的索引列。有什么想法吗?