Python的数据科学函数包(二)——pandas(series & dataframe)(loc & iloc & ix)(csv文件)

30 篇文章 0 订阅
29 篇文章 0 订阅

pandas

1、pandas数据的存储相对来说比较简单,它就只有两种非常重要的数据类型,一种叫series,一种叫dataframe

     series是指那些一维的数据,dataframe是指那些二维的数据。也就是说任何一个datafarame其实是好多个series罗列出来的

2、读取csv数据

不只可以用来读excel,如果普通的文件想读成列形式的也可以用它

train_df = pd.read_csv('train.csv')
train_df.head()

保存csv

train_df.to_csv('1.csv', index=False)

查看前两行

train_df[:2]

默认是header=0,0,ji 表示第一行为标题行

header=None,即指明原始文件数据没有列索引,这样read_csv会自动加上列索引,除非你给定列索引的名字

例如,这是数据集

当train = pd.read_csv(train_path),train是

此时,train[0]就是第一列,train[1]就是第2列

当train = pd.read_csv(train_path, header=0),train是


train = pd.read_csv(train_path,header=None), train是

还可以在pd.read_csv()的时候,规定列名

train = pd.read_csv(train_path,names=COLUMN_NAMES,header=0)

COLUMN_NAMES = ['SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth', 'Species']

train = pd.read_csv(train_path,names=COLUMN_NAMES,header=0)

当header=0表示第一行为标题行,又规定了names的时候,标题行就被覆盖了

head()

.head()

会直接输出数据(默认是前5行)

print(X.head()) 和 print(X)的结果是一样的

3. 查看csv数据大小/长度

train_df.shape

查看列名

data = pd.read_csv('data/Receipt code January minute trading volume.csv')
print(data.columns.values)
或
print(list(data))

查看某一列

查看Path这一列,就直接

self.df['Path']

修改某一列的值

直接赋值修改就可以

my_table_train['image_id']  = my_table_train['image_id'].str.split('/').str[-1]

一行一行修改

import pandas as pd

# 读取csv表格
df = pd.read_csv('your_file.csv')

# 添加新的列
df['new_column'] = 0  # 先将新列的初始值设置为0

# 遍历每一行并计算新列的值
for index, row in df.iterrows():
    previous_columns_sum = row['column1'] + row['column2'] + row['column3']  # 替换column1、column2、column3为您实际的列名
    df.at[index, 'new_column'] = previous_columns_sum

# 保存修改后的csv表格
df.to_csv('your_modified_file.csv', index=False)

查看值内容时是省略号

pd.set_option('display.max_colwidth', None)

处理某一列

如果直接某一列的话数据格式是Series,用.str转一下就可以了

my_table_train['image_id']  = my_table_train['image_id'].str.split('/').str[-1]

concat两列内容

如果两列(数据格式是Series)数据,想要对应concat起来,即findings+impression拼成reports

self.all_texts = self.table['findings'].to_pandas().astype(str).str.cat(self.table['impression'].to_pandas().astype(str), sep=' ').tolist()

转为list

self.all_texts = self.table['findings'].tolist()

14.  unique()  查看某列的不同值及个数

unique()方法返回的是去重之后的不同值,而nunique()方法则直接返回不同值的个数

print(train_df['image_id'].unique())
print(train_df['image_id'].nunique())

15. value_counts()  统计某列不同值分别有几个

在pandas中,value_counts常用于数据表的计数及排序,它可以用来查看数据表中,指定列里有多少个不同的数据值,并计算每个不同值有在该列中的个数,同时还能根据需要进行排序。

print(train_df['image_id'].value_counts())

画pandas的值的图要用sns.plot()

4. 读取csv数据转为numpy 数组

import pandas as pd
 
train = pd.read_csv('train.csv')
train = train.values.tolist()

5. 遍历df

import pandas as pd

# 读取CSV文件并将其转换为DataFrame对象
df = pd.read_csv('file.csv')

# 遍历DataFrame对象中的每一行
for index, row in df.iterrows():
    # 打印每一行的内容
    print(row['column1'], row['column2'], row['column3'])

遍历某一列

for index, item in my_table['answers'].iteritems():
    print()

5、pd.Series(data,index)

pd.DataFrame(data,index,columns)

6、做数据科学的时候,往往把feature放在列上,每一列叫做一个feature
        每一行叫做一个observation

像不同的列记录所有人的身高、所有人的体重,所有人的收入,而每一行是一个不同的人

并且如果直接引用的话,会默认选择列

若要选择行  df.loc('A')

7. 行列选取 / 索引

①行(列)选取:df[]。

单维度选取,这种情况一次只能选取行或者列

iris数据集

选取行

可以用df.loc[]

也可以

#选取0-10行
df = pd.read_csv('dataset/iris.data', header=None)
y = df[0:10]
print(y)


#选取第3行
y = df[3:4]
print(y)

注意如果写作y = df[3],这是在选第3列

选取列

#选取3列
df = pd.read_csv('dataset/iris.data', header=None)
y = df[3]
print(y)


#选取第2列,第4列
y = df[[2,4]]
print(y)

#没法一次选取多个列

②区域选取(多维选取):df.loc[],df.iloc[],df.ix[]。

这种方式可以同时为多个维度设置筛选条件。

pandas以类似字典的方式来获取某一列的值,比如df[‘A’],这会得到df的A列。如果我们对某一行感兴趣呢?这个时候有两种方法,一种是iloc方法,另一种方法是loc方法。loc是指location的意思,iloc中的i是指integer

loc是根据index来索引,比如下边的df定义了一个index,那么loc就根据这个index来索引对应的行。

iloc并不是根据index来索引,而是根据行号来索引,行号从0开始,逐次加1。

根据某一列的值选取行

data.loc[data['satellite_img_name'] == 'Beijing/16_12634_4717_s.jpg']

8、添加列

直接用名称赋值即可

df['POI'] = 'unknown'

删除列 df.drop('new',axis)         

axis=0是指行, axis=1是指列的维度

但是这样删除只是返回一个临时的结果,实际df中并没有删除列,这是相当于一个double check的机制。可以不在原数据进行操作,df2=df.drop('new',axis)     

如果的确要删的话 

df.drop('new',axis=1,inplace= True)

删除满足条件的某行

df = df.drop(df[df['Coordinate'] == 1].index)

9、选择满足相关条件的数据

     选择W列的值大于0的数据

    选择W列的值大于0的数据的Y的数据

 选择W列的值大于0并且Y列的值大于1的数据

10、将另一列的数据当做行名

df.set_index('state')

同样,如果确定要修改,还需要 df.set_index('state',inplace=True)

11、将数据转化成DataFrame

12、分组计算

平均值

最大值

标准差  //standard deviation

能计算的都给你计算一遍

13、解决dataframe输出省略号的问题

pd.set_option('display.max_rows',1000)   # 具体的行数或列数可自行设置
pd.set_option('display.max_columns',1000)


 

16. apply() 根据某些条件处理某些列的值

pandas 的 apply() 函数可以作用于 Series 或者整个 DataFrame

功能是自动遍历整个 Series 或者 DataFrame, 对每一个元素运行指定的函数。

例如想要新建一列['Pneumonia'], [’Target‘]值为1的就是1,值为0的就是0

df['Pneumonia'] = df['Target'].apply(lambda x: 1 if x == 1 else 0)

17. 拆分某一列为好几列

series内置函数str.split

train_df[['x','y','w','h']]  = train_df['bbox'].str[1:-1].str.split(',', expand=True).astype(np.float)

18. str转int

data[['m']] = data[['m']].astype(int)

19. fillna()   填充Nan值

 

20. 去掉某一列值为nan的行

df = df.dropna(subset=['annotation'], axis=0)
判断是否有nan值
df.isna()

21. 过滤

根据某几列的值过滤某些行

import pandas as pd

df = pd.read_csv('北京市_GeneratePointsAlongLines_TableToExcel_transformed.csv')
range = [[116.0392,116.7914],[39.7555,40.1536]]    
df = df[range[0][0]<=df['longitude']]
df = df[range[0][1]>=df['longitude']]
df = df[range[1][0]<=df['latitude']]
df = df[range[1][1]>=df['latitude']]
df.to_csv('北京市_GeneratePointsAlongLines_TableToExcel_transformed_corearea.csv', index=False)

只挑选某一列的值包含特定值的行

data = data[data['satellite_img_name'].str.contains('Beijing', na=False)]

22. 挑选某几列

data = data[['satellite_img_name', 'WGS84 coordinate', 'Bottom Right Coordinate']]

23. 根据某一列排序

import pandas as pd

df = pd.read_csv('data/downstream_task/Beijing_original.csv')
sorted_df = df.sort_values('satellite_img_name')

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值