Python 熊猫数据框,将索引设置为我的csv名称

Python 熊猫数据框,将索引设置为我的csv名称,python,csv,pandas,filenames,Python,Csv,Pandas,Filenames,我有一个关于使用pd.read\u csv的问题 我目前正在从文件夹和文件夹中的多个csv文件构建数据帧 csv文件的名称如下:“C2_1979H”或“C2_1999Z” 我想将我的数据框的索引设置为等于它当前用于创建我的数据框的CSV文件的名称。 我还没有找到这样做的方法。这是我目前的代码 我的数据框如下所示: Date Open High Low Close Vol OI Roll 0 19780106 236.00 237.50 23

我有一个关于使用pd.read\u csv的问题 我目前正在从文件夹和文件夹中的多个csv文件构建数据帧 csv文件的名称如下:“C2_1979H”或“C2_1999Z”

我想将我的数据框的索引设置为等于它当前用于创建我的数据框的CSV文件的名称。 我还没有找到这样做的方法。这是我目前的代码

我的数据框如下所示:

    Date     Open    High     Low   Close     Vol  OI  Roll
0   19780106  236.00  237.50  234.50  235.50    0   0     0
1   19780113  235.50  239.00  235.00  238.25    0   0     0
2   19780120  238.00  239.00  234.50  237.00    0   0     0
3   19780127  237.00  238.50  235.50  236.00    0   0     0
我希望它看起来像这样

            Date       Open    High     Low   Close    Vol  OI  Roll
C2__1979N   19780106  236.00  237.50  234.50  235.50    0   0     0
C2__1979N   19780113  235.50  239.00  235.00  238.25    0   0     0
C2__1979N   19780120  238.00  239.00  234.50  237.00    0   0     0
C2__1979Z   19780127  237.00  238.50  235.50  236.00    0   0     0 ##(assuming this is where the next csv file began)

你试过那个明显的吗

df_temp.index = [file_]*len(df_temp)
它成功了

import os

df_temp = pd.DataFrame({'Close': [235.5, 238.25, 237.0, 236.0],
 'Date': [19780106, 19780113, 19780120, 19780127],
 'High': [237.5, 239.0, 239.0, 238.5],
 'Low': [234.5, 235.0, 234.5, 235.5],
 'OI': [0, 0, 0, 0],
 'Open': [236.0, 235.5, 238.0, 237.0],
 'Roll': [0, 0, 0, 0],
 'Vol': [0, 0, 0, 0]})

df = pd.DataFrame()

# To simulate several df
x=0
for file_ in ['the_path/C2__1979N.csv', 'other_path/C2__1979H.csv']:
    filename, file_extension = os.path.splitext(file_)
    df_temp['name'] = os.path.basename(filename)
    df = df.append(df_temp.loc[x:x+1,:])
    x+=1

df.set_index('name', inplace=True)
df.index.name = None
print(df)

# Result
            Close      Date   High    Low  OI   Open  Roll  Vol
C2__1979N  235.50  19780106  237.5  234.5   0  236.0     0    0
C2__1979N  238.25  19780113  239.0  235.0   0  235.5     0    0
C2__1979H  237.00  19780120  239.0  234.5   0  238.0     0    0
C2__1979H  236.00  19780127  238.5  235.5   0  237.0     0    0
在原始代码中:

for file_ in allFiles:
    names = ['Date', 'Open', 'High', 'Low', 'Close', 'Vol', 'OI', 'Roll']
    df_temp = pd.read_csv(file_, index_col = None, names = names)
    df_temp['Roll'] = 0
    df_temp.iloc[-2,-1] = 1
    filename, file_extension = os.path.splitext(file_)
    df_temp['name'] = os.path.basename(filename)
    df = df.append(df_temp)

df = df.reset_index(drop=True)
df.set_index('name', inplace=True)
df.index.name = None
df = df[names]

df = df.drop_duplicates('Date') ## remove duplicate rows with same date

请注意,我知道我的index\u col=None,但我不知道该怎么说,我刚刚回答了你的问题,告诉我它是否满足你的需要。你需要这样做的原因是什么?如果你滥用了这里的索引点,你可以建立一个dfs的dict,其中键是csv名称,或者添加一个名为“csv_name”的字段,通过做你想做的事情,你完全破坏了索引的有用性。我始终对其他解决方案持开放态度。尽管罗曼已经做到了,但我仍然愿意用其他方式做事情。这就是你学习的方式!如果你不知道文件名怎么办?如中所示,如果我在不同的文件夹上运行此代码,其中包含不同的csv,不同的csv名称。。。那么代码将如何使用它呢?现在看起来我需要输入文件名。。。我说的对吗?当你循环浏览你的文件(
allFiles
)时,你有文件名(
file_u
)对吗?在这种情况下,您只需使用它。我手动键入文件名只是为了模拟。我修改了答案,只从路径中提取文件名。