pandas操作csv常用功能

x33g5p2x  于2022-07-19 转载在 其他  
字(5.2k)|赞(0)|评价(0)|浏览(483)

pandas选取指定列

Pandas 获取列名原文链接:https://blog.csdn.net/lb521200200/article/details/123829793

批量替换整体替换:

批量替换自定义规则

pandas添加表头

pandas筛选空数据

Pandas添加表头(以前有表头不能用),筛选空数据,遍历

按列筛选:

取指定列数据并筛选

筛选完整示例:

添加列:

pandas选取指定列

1,按照位置:

import pandas as pd

data = pd.read_csv()

data = data.iloc[:, 0:3] # 按位置取某几列

2,按照指定列名:

import pandas as pd
df=pd.read_excel("职位明细329.xlsx")

df1 = df[['用户ID','职位ID']]

Pandas 获取列名

原文链接:https://blog.csdn.net/lb521200200/article/details/123829793

import pandas as pd

from numpy.random import randint

df = pd.DataFrame(columns=list('abcdefghij'))

%timeit [column for column in df]

%timeit list(df.columns.values)

%timeit list(df)

%timeit list(df.columns)

批量替换整体替换:

创建字典

dict = {"A":1, "B":2, "C":3}  # 其中ABC为原数据,123为替换数据

替换

pd['替换列'] = pd['替换列'].replace(dict)  # '替换列'为需要替换列字段

批量替换自定义规则

def get_path(path):
     if 'imgs' in path:
         return os.path.dirname(label_file) + path
     else:
         return path
 df_label = pd.read_csv(label_file)

 columns= list(df_label.columns.values)

 if dtype == "train":
     data = df_label[(df_label['is_train'] == 1)]
 else:
     data = df_label[(df_label['is_train'] == 0)]
 imgs = data[columns[0]].apply(get_path)

 self.imgs.extend(imgs.values.tolist())
 id1_s=data[columns[1]]
 self.id1_s.extend(id1_s.values.astype(np.int64))

pandas添加表头

import pandas as pd

    df_label= pd.read_csv('tf.csv', header=None, names=['a', 'b', 'c'])

    df_label.loc[1] = ["related_path", 0, 0]
    df_label.to_csv('tf.csv', index=False)
    df_label = pd.read_csv('tf.csv', header=None, names=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'])
    df_label.to_csv('tf.csv', index=False)

pandas筛选空数据

filtered_df = df[df['name'].notnull()]
filtered_df = df[df['name'].isnull()]

Pandas添加表头(以前有表头不能用),筛选空数据,遍历

import pandas as pd

    label_file=r'F:\label.csv'
    df_label = pd.read_csv(label_file)
    col_names = df_label.columns.tolist()  # 将数据框的列名全部提取出来存放在列表里
    if 'box' not in col_names:
        col_names.append('box')
        df_label = pd.read_csv(label_file, header=None, names=col_names)
        df_label.to_csv(label_file, index=False)
        df_label = pd.read_csv(label_file)

    data_none = df_label[df_label["box"].isnull()]

    for index,data_n in data_none.iterrows():
        img_path=data_n[col_names[0]]
        if img_path.endswith(".jpg"):
            tmp_dir = r'F:\project\shida\not_found'
            img_path_all = os.path.dirname(label_file) + img_path
            shutil.copy(img_path_all, tmp_dir)

按列筛选:

注意:df_label.img_path

是直接选择列名,不用加引号""筛选。

df_label.loc[(df_label.img_path == img_path), 'box'] = box
  df_label.loc[(df_label.img_path == img_path), col_names[1]] = new_index

取指定列数据并筛选

data = df_label[(df_label["img_path"] == img_path)]
            if data.size>0:
                if data.shape[0]>1:
                    print('err',img_path)

筛选完整示例:

import os.path

if __name__ == '__main__':

    import pandas as pd

    label_file=r'F:\project\shida\small\label.csv'
    df_label = pd.read_csv(label_file)
    col_names = df_label.columns.tolist()  # 将数据框的列名全部提取出来存放在列表里
    if 'box' not in col_names:
        col_names.append('box')
        df_label = pd.read_csv(label_file, header=None, names=col_names)
        df_label.to_csv(label_file, index=False)
        df_label = pd.read_csv(label_file)

    data_path=r'F:\project\shida\small\val_clf_size_2.txt'
    with open(data_path ,'r') as f_r:
        lines =f_r.readlines()
        for line in lines:
            line_data= line.split(' ')
            img_path=line_data[0]
            img_path='/imgs/'+os.path.basename(img_path)
            box=line_data[1]
            id=int(line_data[2])

            data = df_label[(df_label["img_path"] == img_path)]
            if data.size>0:
                if data.shape[0]>1:
                    print('err',img_path)
                    exit(435)
                index=int(data[col_names[1]])
                new_index=0
                if index in [1,2]:
                    new_index=index-1
                else:
                    new_index = id+2
                df_label.loc[(df_label.img_path == img_path), 'box'] = box
                df_label.loc[(df_label.img_path == img_path), col_names[1]] = new_index
            else:
                print('not found',img_path)



            # df_label.loc[1] = ["related_path", 0, 0, 0]
    df_label.to_csv(label_file, index=False)

添加列:

df_label = pd.read_csv(label_file)
    col_names = df_label.columns.tolist()  # 将数据框的列名全部提取出来存放在列表里


    if 'box' not in col_names:
        df_label.insert(loc=len(col_names), column='box', value='')

pandas为DataFrame格式数据添加新列的方法非常简单,只需要新建一个列索引,再为其赋值即可。

5种常见添加新列的方法。

首先,创建一个DataFrame结构数据,作为数据举例。

import pandas as pd
# 创建一个DataFrame结构数据
data = {'a': ['a0', 'a1', 'a2'],
        'b': ['b0', 'b1', 'b2']}
df = pd.DataFrame(data)
print('举例数据情况:\n', df)

添加新列的方法,如下:
一、insert()函数
语法:
DataFrame.insert(loc, column, value,allow_duplicates = False)

参数    说明
loc    必要字段,int类型数据,表示插入新列的列位置,原来在该位置的列将向右移。
column    必要字段,插入新列的列名。
value    必要字段,新列插入的值。如果仅提供一个值,将为所有行设置相同的值。可以是int,string,float等,甚至可以是series /值列表。
allow_duplicates    布尔值,用于检查是否存在具有相同名称的列。默认为False,不允许与已有的列名重复。
实例:插入c列

df.insert(loc=2, column='c', value=3)  # 在最后一列后,插入值全为3的c列
print('插入c列:\n', df)
1
2

二、直接赋值法
语法:df[‘新列名’]=新列的值
实例:插入d列

df['d'] = [1, 2, 3]  # 插入值为[1,2,3]的d列
print('插入d列:\n', df)
1
2

注:该方法不可以选择插入新列的位置,默认为最后一列。如果新增的一列值相同,直接为其赋值一个常量即可;如果插入值不同,为列表格式,需与已有列的行数长度一致,如举例中原来列为3行,新增列也必须有3个值。

三、reindex()函数
语法:df.reindex(columns=[原来所有的列名,新增列名],fill_value=值)
reindex()函数用法较多,此处只是针对添加新列的用法
实例:插入e列

df1 = df.reindex(columns=['a', 'b', 'c', 'd', 'e'])  # 不加fill_value参数,默认值为Nan
df2 = df.reindex(columns=['a', 'b', 'c', 'd', 'e'], fill_value=1)  # 加入fill_value参数,填充值为1
print('插入e列(不加fill_value参数):\n', df1)
print('插入e列(加fill_value参数):\n', df2)
1
2
3
4

注:该方法需要把原有的列名和新列名都加上,如果列名过多,就比较麻烦。

四、concat()函数
原理:利用拼接的方式,添加新的一列。好处是可以同时新增多个列名。
concat()函数用法较多,此处只是针对添加新列的用法
实例:插入f列

df1 = pd.concat([df1, pd.DataFrame(columns=['f'])])
print('插入f列:\n', df1)
1
2

五、loc()函数
原理:利用loc的行列索引标签来实现。
语法:df.loc[:,新列名]=值
实例:插入g列

df1.loc[:, 'g'] = 0
print('插入g列:\n', df1)
1
2

以上就是pandas添加新列的5种常见用法。
————————————————
版权声明:本文为CSDN博主「一位代码」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/LHJCSDNYL/article/details/124577994

相关文章