python - 字典中的 .csv 具有更改的标题名称和索引

标签 python python-3.x pandas csv

我正在尝试将制表符分隔文件的特定列放入字典中。我正在尝试多种方法,但没有一种能给我想要的结果。

例如我有这个文件:

Name   Start   End   Size
del1   100     105   5
del2   150     160   10
del3   250     300   50

和这个文件,都是.csv

Name   Qual   StartB  EndB  Size
inv1   6      400     405   5
inv2   7      450     460   10
inv3   20     450     400   50

我想要的是这样的,其中 Name 是键,其他是值,另外我有更改标题和标题索引的问题,但它们的意思是一样的:

del_dict{del1: {Start: 100, End: 105, Size:5} del2: {etc}

根据其他堆栈溢出答案,我尝试以多种方式读取文件。

for file in glob.glob(directoryname + "/*.csv"):
    dict = pd.read_csv(file, squeeze=False, sep="\t").to_dict()
        print(dict)

for file in glob.glob(directoryname + "/*.csv"):
    df = pd.read_csv(open(file, 'r'), header=0, sep="\t")
    if "StartB" in df.keys():
        name = df.Name
        start_pos = df.StartB
        end_pos = df.EndB
    else:
        name = df.Name
        start_pos = df.Start
        end_pos = df.End

但这给了我数据框,我似乎无法将其放入字典中。

我也试过这段代码,我以前用过,但它只有一个文件,没有更改标题,然后它会导致太多循环和硬编码,无法根据我打开的文件消化我需要的一切。

for file in glob.glob(directoryname + "/*.csv"):
    with open(file, 'r') as csvfile:
        csv_list = []
        for line in csvfile:
            csv_list.append(line.strip("\t"))

我是 python 的新手,我知道必须有一个相对简单的答案,但我似乎找不到它。抱歉,如果答案已经在堆栈溢出,我尝试了几个小时来寻找类似/可行的问题,这就是我真正陷入困境的地方。

最佳答案

我认为需要使用 DataFrame.set_indexName 列创建索引然后调用DataFrame.to_dict带参数 orient='index':

df = pd.read_csv(file,  sep="\t")

d = df.set_index('Name').to_dict(orient='index')
print (d)
{'del1': {'Start': 100, 'End': 105, 'Size': 5},
 'del2': {'Start': 150, 'End': 160, 'Size': 10},
 'del3': {'Start': 250, 'End': 300, 'Size': 50}}

编辑 - 您可以按字典重命名列名称并按列表列选择以导出到字典:

d = {'StartB':'Start','EndB':'End'}
d = df.set_index('Name').rename(columns=d)[['Start','End','Size']].to_dict(orient='index')
print (d)
{'inv1': {'Start': 400, 'End': 405, 'Size': 5}, 
 'inv2': {'Start': 450, 'End': 460, 'Size': 10}, 
 'inv3': {'Start': 450, 'End': 400, 'Size': 50}}

关于python - 字典中的 .csv 具有更改的标题名称和索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52590383/

相关文章:

python - 在 gui 中更新 matplotlib 图的有效方法?

python - 如何在 Python 中将文件流转换为数据 URI?

python - Json 文件中的列表框

python - value_counts() 计算数据帧中的 NaN

python - 乘法追加python

python - 如何操作声明为 `self.tab[(' _',0)]` 的数组而不明确知道它包含什么?

python - 将所有非零值放在数组的右边

python - Django 模板 : Passing a variable from an include, 进入点符号路径

python - 当存在 python 2.7 时,使用 python 3.8 创建虚拟环境

Python 数据类型 ('O')。处理对象数据类型。转换为字符串/整数