Python 熊猫中具有相同名称的多个列
我正在从CSV文件创建一个Python 熊猫中具有相同名称的多个列,python,python-2.7,csv,pandas,Python,Python 2.7,Csv,Pandas,我正在从CSV文件创建一个dataframe。我已经通过了文件,多个SO帖子,链接,因为我刚刚开始熊猫,但没有得到它。CSV文件有多个同名列,例如a 所以在形成dataframe之后,当我执行df['a']时,它将返回哪个值?它不会返回所有值 此外,只有一个值具有字符串,其余值为None。如何获取该列?相关参数为mangle\u dupe\u cols 从 默认情况下,您的所有'a'列都将按照上面的指定命名为'a.0'…'a.N' 如果使用了mangle\u dupe\u cols=False,
dataframe
。我已经通过了文件,多个SO帖子,链接,因为我刚刚开始熊猫,但没有得到它。CSV文件有多个同名列,例如a
所以在形成dataframe
之后,当我执行df['a']
时,它将返回哪个值?它不会返回所有值
此外,只有一个值具有字符串,其余值为
None
。如何获取该列?相关参数为mangle\u dupe\u cols
从
默认情况下,您的所有'a'
列都将按照上面的指定命名为'a.0'…'a.N'
如果使用了mangle\u dupe\u cols=False
,则导入此csv
将产生错误
您可以使用
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'来获得我想要的列。这是我通常使用我的基因表达数据集所做的,因为同一基因的基因序列稍有不同,相同的基因名称可以出现多次:
.index()
,它可以帮助我找到在每次迭代中重复的第一个元素,并在下面划线:for
循环帮助我在所有重复的列下面加下划线,现在每个列都有一个不同的名称
此特定代码与正好出现2次的列相关,但对于在数据帧中出现甚至超过2次的列,可以对其进行修改
df.columns=所有列的列表
就是这样,我希望它有帮助:)回答这个问题:
当我做df['a']时,它将返回哪个值
-它将返回一个所有列都命名为a
@MaxU的df,它没有返回所有值…这就是为什么我感到惊讶!!!!我在Pandas 0.19.0下测试了它-你使用的是什么版本?@MaxU same…当我使用像时,它工作得非常好!!!!很好。。。。。另外,在我的例子中,只有一个可以有一个值,rest将是NaN
。因此,我如何选择唯一的值非NaN或NaN是所有值都是nan@vks这是一个完全无关的问题。碰巧最近有人问这个问题。我会找到它并贴在这里。@vks这个问题和答案可以用来得到你想要的。如果对你来说不够具体,问一个新问题。我看不出您实际使用了参数mangle\u dupe\u cols
。为什么只有我一个人感到困惑?:)@瑞尼你不是唯一的一个。他需要在某个地方使用它。默认情况下,如果为true,那么它将处理重复的列。
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')
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')
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
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'