Python 熊猫:如何水平合并多个CSV(键,值)文件,并使用文件名在结果DF中命名'value'列

Python 熊猫:如何水平合并多个CSV(键,值)文件,并使用文件名在结果DF中命名'value'列,python,csv,pandas,Python,Csv,Pandas,我在一个目录中有16个不同的csv文件,我正在尝试将它们加载到一个数据帧中。每个文件都有datetime和float64列。所有CSV文件都没有列标题。目录 location = os.path.join(base_dir, "DirectoryName") symbols = os.listdir(location) df = pd.DataFrame(index=dates) for symbol in symbols: location = os.path.join(base_di

我在一个目录中有16个不同的csv文件,我正在尝试将它们加载到一个数据帧中。每个文件都有
datetime
float64
列。所有CSV文件都没有列标题。目录

location = os.path.join(base_dir, "DirectoryName")
symbols = os.listdir(location)
df = pd.DataFrame(index=dates)
for symbol in symbols:
    location = os.path.join(base_dir, "DirectoryName", symbol)
    df_temp = pd.read_csv(location, index_col=0, parse_dates=True, dayfirst=True, na_values=['nan'])
    df_temp.dropna()
    df_temp.index = df_temp.index.normalize()
    df_temp = normalize_data(df_temp)
    df = df.join(df_temp)
我现在遇到的问题是最后一个数据帧
df
,它的索引是
datetime
,但它对应的行值是列名,第一行填充了
NaN

这是快照


我必须删除df的第一行,但这在执行其他操作时没有多大帮助,因为某些数据将丢失。我无法重命名列标题,因为每个文件的列标题都不同,我只知道如何静态更改。我只下载了以下文件:

['hash_rate.csv',
 'difficulty.csv',
 'cost_per_tx.csv',
 'block_size.csv',
 'avg_block_size.csv']
这就是为什么在结果DF中只会看到数据的相应部分

请在代码中查找注释

代码:

输出:

                     block_size     hash_rate  avg_block_size  cost_per_tx  \
date
2015-01-05 18:15:05     34469.0  3.479099e+08        0.375637     8.185000
2015-01-06 18:15:05     36219.0  3.323940e+08        0.477130     6.598278
2015-01-07 18:15:05     38212.0  3.560892e+08        0.624724     6.232809
2015-01-08 18:15:05     40943.0  4.261981e+08        0.754424     7.113695
2015-01-09 18:15:05     43021.0  4.099610e+08        0.515467     6.199964
2015-01-10 18:15:05     45487.0  4.655484e+08        0.451940     6.821970
2015-01-11 18:15:05     47963.0  4.920513e+08        0.535354     7.958116
2015-01-12 18:15:05     50594.0  6.940933e+08        0.536199     9.415383
2015-02-04 18:15:05     32832.0  3.413843e+08        0.421406     8.054181
2015-02-05 18:15:05     34523.0  3.479099e+08        0.373642     8.958115

                       difficulty
date
2015-01-05 18:15:05  4.761056e+10
2015-01-06 18:15:05  4.880749e+10
2015-01-07 18:15:05  4.940201e+10
2015-01-08 18:15:05  5.227830e+10
2015-01-09 18:15:05  5.425663e+10
2015-01-10 18:15:05  6.081322e+10
2015-01-11 18:15:05  6.225398e+10
2015-01-12 18:15:05  7.272278e+10
2015-02-04 18:15:05  4.671755e+10
2015-02-05 18:15:05  4.761056e+10

考虑使用
名称
参数显式定义列,在循环中使用文件名
符号
(当然替换
.csv
扩展名):


如果每个文件的列
不同,如何将所有CSV文件合并/加入到单个DF中?你想横向合并它们吗?如果你想发布一个指向一个或两个CSV文件的链接,或者在这里以文本形式发布一个小数据示例,那么会更容易帮助你…所有文件都有共同的第一列,我将其用作索引。这是指向@MaxU文件的链接
                     block_size     hash_rate  avg_block_size  cost_per_tx  \
date
2015-01-05 18:15:05     34469.0  3.479099e+08        0.375637     8.185000
2015-01-06 18:15:05     36219.0  3.323940e+08        0.477130     6.598278
2015-01-07 18:15:05     38212.0  3.560892e+08        0.624724     6.232809
2015-01-08 18:15:05     40943.0  4.261981e+08        0.754424     7.113695
2015-01-09 18:15:05     43021.0  4.099610e+08        0.515467     6.199964
2015-01-10 18:15:05     45487.0  4.655484e+08        0.451940     6.821970
2015-01-11 18:15:05     47963.0  4.920513e+08        0.535354     7.958116
2015-01-12 18:15:05     50594.0  6.940933e+08        0.536199     9.415383
2015-02-04 18:15:05     32832.0  3.413843e+08        0.421406     8.054181
2015-02-05 18:15:05     34523.0  3.479099e+08        0.373642     8.958115

                       difficulty
date
2015-01-05 18:15:05  4.761056e+10
2015-01-06 18:15:05  4.880749e+10
2015-01-07 18:15:05  4.940201e+10
2015-01-08 18:15:05  5.227830e+10
2015-01-09 18:15:05  5.425663e+10
2015-01-10 18:15:05  6.081322e+10
2015-01-11 18:15:05  6.225398e+10
2015-01-12 18:15:05  7.272278e+10
2015-02-04 18:15:05  4.671755e+10
2015-02-05 18:15:05  4.761056e+10
for symbol in symbols:
    ...
    df_temp = pd.read_csv(location, 
                          index_col=0, 
                          parse_dates=True, 
                          dayfirst=True, 
                          na_values=['nan'],
                          header=None,
                          names=['date', symbol.replace('.csv', '')])