从列表中创建一个Dataframe,并保留重复项。

9 浏览
0 Comments

从列表中创建一个Dataframe,并保留重复项。

我有一个数据帧列表。列表中的每个数据帧都是独特的,意思是它们有一些共享的列,但是不同。我想创建一个包含列表中所有数据帧的所有列的单个数据帧,并在元素不存在时填充NaN。我尝试了以下代码:

import pandas as pd
df_new = pd.concat(list_of_dfs)
#我得到以下错误:InvalidIndexError: Reindexing only valid with uniquely valued Index objects

问题似乎是由于列表中的数据帧。每个数据帧只有一行,因此它的索引为零,因此重新索引将无法解决问题。我尝试了以下方法:

 list_of_dfs.append(pd.DataFrame([rows], columns = tags).set_index(np.array(random.randint(0,5000))))

基本上生成一个随机数作为索引。然而,我得到了这个错误:

ValueError: The parameter "keys" may be a column key, one-dimensional array, or a list containing only valid column keys and one-dimensional arrays.

0
0 Comments

问题出现的原因是在创建DataFrame时,列表中存在重复项。解决方法是在创建DataFrame时使用

pd.concat()

函数,并设置axis='index'参数,以确保使用索引作为连接的基础。另外,在创建DataFrame后,可以使用

df.loc[~df.index.duplicated(keep='first')]

来去除重复的索引项。以下是完整的解决方法:

首先,我们可以使用

pd.concat()

函数将列表中的DataFrame对象连接起来,并设置axis='index'参数,以确保使用索引作为连接的基础。示例代码如下:

df_new = pd.concat(list_of_dfs, axis='index')

然后,我们可以使用

df.loc[~df.index.duplicated(keep='first')]

来去除重复的索引项。示例代码如下:

df = df.loc[~df.index.duplicated(keep='first')]

以上代码中的df是原始的DataFrame对象,list_of_dfs是包含多个DataFrame对象的列表。

通过以上的解决方法,我们可以创建一个DataFrame对象,并保留其中的重复项。这样做可以确保DataFrame对象的索引是唯一的,避免了重复项带来的问题。

0
0 Comments

问题出现的原因是当使用pd.concat函数将两个DataFrame进行合并时,如果两个DataFrame中存在重复的列名,那么合并后的结果中只会保留一个重复的列名,另一个重复的列名会被丢弃。这导致了在合并后的DataFrame中,存在一些列的值为NaN(缺失值)。

解决方法是在使用pd.concat函数时,通过设置参数ignore_index为True,可以忽略原始DataFrame中的索引,重新生成合并后DataFrame的索引。这样可以保证合并后的DataFrame中不会出现重复的索引值,同时保留了重复的列名。

具体的代码如下:

import pandas as pd
df1 = pd.DataFrame({'a':[1,2,3],'x':[4,5,6],'y':[7,8,9]})
df2 = pd.DataFrame({'b':[10,11,12],'x':[13,14,15],'y':[16,17,18]})
# 使用pd.concat函数进行合并,并设置ignore_index为True
result = pd.concat([df1,df2], axis=0, ignore_index=True)
print(result)

输出结果如下:

     a   x   y     b
0  1.0   4   7   NaN
1  2.0   5   8   NaN
2  3.0   6   9   NaN
3  NaN  13  16  10.0
4  NaN  14  17  11.0
5  NaN  15  18  12.0

通过设置ignore_index为True,合并后的DataFrame中保留了所有列,并生成了新的索引。这样可以避免由于重复的列名导致的列值丢失的问题。

0