[英]Multiple columns with the same name in Pandas
我正在从 CSV 文件创建dataframe
。 我已经浏览了文档、多个 SO 帖子、链接,因为我刚刚开始使用 Pandas 但没有得到它。 CSV文件有多个列有相同的名字说a
。
那么在形成dataframe
,当我执行df['a']
它会返回哪个值? 它不会返回所有值。
此外,只有一个值会有一个字符串 rest 是None
。 我怎样才能得到那个专栏?
相关参数是mangle_dupe_cols
从文档
mangle_dupe_cols : boolean, default True Duplicate columns will be specified as 'X.0'...'X.N', rather than 'X'...'X'
默认情况下,您'a'
所有'a'
列都命名为'a.0'...'a.N'
,如上所述。
如果您使用mangle_dupe_cols=False
,则导入此csv
会产生错误。
你可以得到你所有的列
df.filter(like='a')
示范
from StringIO import StringIO
import pandas as pd
txt = """a, a, a, b, c, d
1, 2, 3, 4, 5, 6
7, 8, 9, 10, 11, 12"""
df = pd.read_csv(StringIO(txt), skipinitialspace=True)
df
df.filter(like='a')
我有一个类似的问题,不是因为从 csv 读取,而是我有多个同名的 df 列(在我的例子中是“id”)。 我通过获取 df.columns 并使用列表重置列名来解决它。
In : df.columns
Out:
Index(['success', 'created', 'id', 'errors', 'id'], dtype='object')
In : df.columns = ['success', 'created', 'id1', 'errors', 'id2']
In : df.columns
Out:
Index(['success', 'created', 'id1', 'errors', 'id2'], dtype='object')
从这里开始,我可以调用“id1”或“id2”来获取我想要的列。
这就是我通常对我的基因表达数据集所做的,因为相同基因的基因序列略有不同,所以相同的基因名称可能会出现多次:
duplicated_columns_list = []
list_of_all_columns = list(df.columns)
for column in list_of_all_columns:
if list_of_all_columns.count(column) > 1 and not column in duplicated_columns_list:
duplicated_columns_list.append(column)
duplicated_columns_list
.index()
帮助我找到在每次迭代中重复的第一个元素并给它下划线:for column in duplicated_columns_list:
list_of_all_columns[list_of_all_columns.index(column)] = column + '_1'
list_of_all_columns[list_of_all_columns.index(column)] = column + '_2'
这个for
循环帮助我强调所有重复的列,现在每列都有一个不同的名称。
此特定代码与恰好出现 2 次的列相关,但可以针对在数据框中出现甚至超过 2 次的列进行修改。
df.columns = list_of_all_columns
就是这样,我希望它有帮助:)
与 JDenman6 类似(并与您的问题相关),我有两个同名的 df 列(名为“id”)。 因此,调用
df['id']
返回 2 列。 您可以使用
df.iloc[:,ind]
其中ind对应于列的索引,具体取决于它们在 df 中的排序方式。 您可以使用以下方法找到索引:
indices = [i for i,x in enumerate(df.columns) if x == 'id']
用您要搜索的列的名称替换“id”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.