我正在dataframe
创建一个csv
。我已经通过文档,多个SO
帖子,链接,因为我刚开始Pandas
但没有得到它。 csv有多个具有相同名称的列,如a
。
所以在形成dataframe
后,当我df['a']
时,它会返回哪个值?它不会返回所有值。
同样只有一个值会有一个字符串,它将是None
。我怎样才能获得该列?
答案 0 :(得分:6)
相关参数为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.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')
答案 1 :(得分:1)
这就是我通常对基因表达数据集所做的,因为相同基因的基因序列略有不同,所以相同的基因名称可能会出现多次:
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
就是这样,我希望它有帮助:)
答案 2 :(得分:0)
我有一个类似的问题,不是由于从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'来获得我想要的列。