如何利用python批量判断文件是否有指定列名,如果没有重新名字

问题

对于有相同列的大量文件,有的有列名,有的没有列名,该如何处理呢。

解决思路

1,读取数据,查看列名是否为指定列名
2. 如果不存在,以没有列名的方式读取,重新命名
3. 保存。

代码

import os
import pandas as pd
import numpy as np  # 引入 NumPy 库以进行数据类型转换

# 指定目录路径
base_directory = r''

# 遍历目录下的 CSV 文件
for file in os.listdir(base_directory):
    if file.endswith('.csv'):
        file_path = os.path.join(base_directory, file)
        df = pd.read_csv(file_path)
        # 获取 location_code 列的唯一值
        if 'location_code' in df.columns:
            unique_location_codes = df['location_code'].unique()
        else:
            # 以没有列名的方式读取 CSV 文件
            df = pd.read_csv(file_path, header=None)
            # 添加列名
            column_names = ["location_code", "year", "month", "Day", "T", "TM", "Tm", "SLP", "H", "PP", "VV", "V", "VM", "VG", "RA", "SN", "TS", "FG"]
            df.columns = column_names
            df.to_csv(file_path, index=False)
            print(file_path)

我这里以 大量的 csv为例,

说明一下

如果你想打印 DataFrame 的列名,你可以使用 df.columns 属性,如下所示:

print(df.columns)

这将输出 DataFrame 的列名列表。

如果在读取 CSV 文件时没有指定列名,Pandas 会默认使用整数作为列名。你可以使用 header 参数来指定数据的哪一行包含列名。通常情况下,列名会出现在 CSV 文件的第一行,所以你可以这样读取文件:

import pandas as pd

# 读取 CSV 文件,指定第一行为列名
df = pd.read_csv('your_file.csv', header=0)

在这个例子中,header=0 表示第一行包含列名。如果列名出现在其他行,只需将 header 参数的值相应地更改为列名所在的行数。

一旦你的 DataFrame 有了列名,你就可以通过列名来访问数据了。例如,如果你的列名是 “col1”、“col2” 和 “col3”,你可以这样访问数据:

data_in_col1 = df['col1']
data_in_col2 = df['col2']
data_in_col3 = df['col3']

这是一种在没有指定列名的情况下读取 CSV 文件后添加列名的方法。如果你的 CSV 文件包含有关列名的信息,你也可以从中提取列名并将其分配给 DataFrame 列。

如果在读取 CSV 文件时没有列名,默认情况下 Pandas 会自动生成整数索引作为列名。你可以使用整数索引来访问列。例如,如果你有一个没有指定列名的 DataFrame,你可以这样访问它的列:

import pandas as pd

# 读取没有列名的 CSV 文件
df = pd.read_csv('your_file.csv')

# 通过整数索引访问列
data_in_first_column = df.iloc[:, 0]  # 访问第一列
data_in_second_column = df.iloc[:, 1]  # 访问第二列
data_in_third_column = df.iloc[:, 2]  # 访问第三列

在这里,iloc 是一个用于按整数位置进行访问的属性。你可以使用整数索引来访问列,其中 [:, 0] 表示访问第一列,[:, 1] 表示访问第二列,以此类推。

注意,如果你知道列的具体位置,你可以使用整数索引来访问列,但是这种方式不太直观。最好的方法是在读取 CSV 文件时指定列名,以便更容易访问和理解数据。

如果要以没有列名的方式读取 CSV 文件,你可以使用 Pandas 的 read_csv 函数,并将 header 参数设置为 None。这告诉 Pandas 不要将第一行作为列名,而将默认的整数索引作为列名。

以下是一个示例:

import pandas as pd

# 以没有列名的方式读取 CSV 文件
df = pd.read_csv('your_file.csv', header=None)

# 访问列
data_in_first_column = df.iloc[:, 0]  # 访问第一列
data_in_second_column = df.iloc[:, 1]  # 访问第二列
data_in_third_column = df.iloc[:, 2]  # 访问第三列

这将使 Pandas 以没有列名的方式读取 CSV 文件,你可以通过整数索引来访问列。

如果你已经读取了没有列名的 CSV 文件,并希望添加列名,你可以使用 Pandas 的 columns 属性为 DataFrame 添加列名。在你的情况下,你可以这样做:

import pandas as pd

# 以没有列名的方式读取 CSV 文件
df = pd.read_csv('your_file.csv', header=None)

# 添加列名
column_names = ["location_code", "year", "month", "Day", "T", "TM", "Tm", "SLP", "H", "PP", "VV", "V", "VM", "VG", "RA", "SN", "TS", "FG"]
df.columns = column_names

# 现在 DataFrame 具有列名,你可以访问列了
data_in_location_code_column = df["location_code"]
data_in_year_column = df["year"]
# 以此类推...

这将为 DataFrame 中的每一列分配所需的列名。

是不是在担心会覆盖掉数据

将列名分配给 DataFrame 的 columns 属性不会影响数据本身,只会更改列名。已经存在的数据将保持不变,只是列名会被替换。所以不会覆盖数据,只是为数据添加了更容易理解的列名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值