常识
- 使用
pandas.read_csv
从csv文件中读取数据,对于csv中缺失的空值,读进dataframe
会自动补为numpy.nan
,且数据类型为float
操作
- 读取
csv
文件,存储为dataframe
数据类型
df = pandas.read_csv(csv_path)
- 查看
csv
文件的dataframe
的所有列字段名
print(df.columns)
- 按行遍历
dataframe
for row in df.itertuples():
可以用row.column_name
访问该行具体的列(column_name
无需加引号),此遍历方式不可在遍历的过程中修改dataframe的具体值!
在遍历中可以修改dataframe的值:
# 假设我们想要将列A的值加1
for index, row in df.iterrows():
# 直接在DataFrame上使用.loc更新值
df.loc[index, 'A'] = row['A'] + 1
- 删除
dataframe
的指定整列数据
df = df.drop(['city', 'region', 'iso_country_code'], axis=1)
# 删除列 'city', 'region', 'iso_country_code'
# 这里的删除其实并没有对df本身作出任何改变,而是将df进行拷贝,将拷贝的副本进行了列删除操作,所以这里一定要赋值给一个新的df,仅仅用df.drop并不能改变df
- 根据某个字段的值的集合条件筛选出符合条件的目标行,以构成新
dataframe
# 使用isin()方法筛选匹配的行
new_df = df[df['placekey'].isin(mht_poi_list)]
# 筛选出df中 placekey字段的值在列表mht_poi_list中的记录行,以构成一个新dataframe new_df
new_df = new_df.reset_index(drop=True)
# 经过筛选而得到的dataframe索引很乱,不连续,这里的操作是在重排索引
- 往
dataframe
指定位置插入一整列
df.insert(loc=6, column='top_category_id', value=cate1_ids)
# loc 位置
# column 列名
# value 数据来源 (这里一般我习惯用list,要求list的长度要与dataframe的行数目一致)
- 将
dataframe
数据写入csv
文件
df.to_csv(csv_path, index=False) # 不把行索引信息写入csv文件
df.to_csv(csv_path, index=True) # 把行索引信息写入csv文件
- 使用
list
构建dataframe
df = pandas.DataFrame(data, columns=['head', 'relation', 'tail'])
# data是一个list,data这个list里面的元素也是一个个list,每一个list表示一行数据
# columns 表示列名
# data里面的list中的元素放置位置要与columns一致
- 判断
dataframe
的具体某一字段的所有值是否存在重复,判断具体某一字段的所有值是否都是唯一的
duplicates = data['placekey'].duplicated() # 查看data这个dataframe的‘placekey’字段每个值是否存在重复,如果是重复的,返回True,如果不是重复的,返回False
has_duplicates = duplicates.any()
也可以通过调用any()
函数来检查返回的布尔Series是否包含任何True值,以确定是否存在重复值。
False
则不包含重复值,True
则包含重复值。
- 判断
csv
中具体某一个字段中是否存在空值
方法一:
# 记录'location_name'字段下的空值数量
null_count = data['location_name'].isnull().sum()
print(null_count)
# 如果输出0的话,表示该字段下不存在空值
方法二:
# 挨个判断'location_name'字段下的每个值是否为空值,返回一个n x 1的向量,n是总行数,向量中的true表示值为空,false表示值为不空。
# 如果返回的这个向量,每一个值都是false,则表示该字段下的每个值都不为空
empty_score = data['location_name'].isnull()
if empty_score.any():
# 这个函数是用来判断返回的这个向量里是否存在一个true值,如果存在一个true值,则返回true,若一个true都没有,则返回false
# 如果该字段下没有空值,则该函数应该返回false
print('There are empty values in the location_name column.')
else:
print('There is no empty value in the location_name column.')
- dataframe 查看某列有哪些可能值
df['column'].unique()
- 查看dataframe的每一列的数据类型或者具体某一列的数据类型
print(df.dtypes)
print(df['id'].dtypes)#如果一列中含有多个类型,则该列的类型会是object,同样字符串类型的列也会被当成object类型.
- 查看dataframe的具体某行某列
df.loc[1]['polygon']
# 行索引号
# 列''内加列名
- 想知道具体某一列(某个字段)有多少个不同的值,可以使用
nunique()
方法
unique_count = df['column_name'].nunique()
print(f"Total number of unique values in 'column_name': {unique_count}")
在pandas中,nunique()
方法用于计算DataFrame
中不同值的数量。默认情况下,nunique()
方法不会将NaN
(即缺失值)计入唯一值的总数。这意味着,如果列中存在NaN值,它们不会被算作一个独立的值计入总数中。
- 不用数据集中的列名,读取dataframe时使用自定义列名
在读取时直接指定列名:如果你在读取数据时就知道你想要的列名,你可以使用names参数直接在读取函数中指定。
例如,使用pd.read_csv()
或pd.read_excel()
时,如果你不想使用文件中的第一行作为列名,可以设置header=None
并通过names
参数提供列名列表。
df = pd.read_csv('file_path.csv', header=None, names=['列名1', '列名2', '列名3'])
- 在dataframe中随机采样
.sample()
函数
DataFrame的.sample()
函数是pandas库中的一个非常实用的函数,用于随机抽取数据帧(DataFrame)中的行或列。这个函数非常适合于进行随机抽样或创建数据的随机子集。
下面是.sample()函数的一些关键参数及其解释:
n
: 整数,指定要抽取的行或列的数量。不能与frac同时使用。frac
: 浮点数,表示要抽取的行或列占原始数据帧的比例。例如,frac=0.5
表示随机抽取原数据的50%
。不能与n
同时使用。replace
: 布尔值,默认为False
。如果为True
,则允许重复抽样,即一个行或列可以被抽取多次;如果为False
,则进行无重复抽样。weights
: 类似于数组的结构,用于为每行或列指定抽样权重。如果未指定,则所有行或列的抽样权重相等。random_state
: 整数或numpy的RandomState对象,用于控制随机数生成器的种子,以保证抽样结果的可重复性。如果你希望每次抽样结果都相同,可以指定一个固定的整数。axis
: 整数或字符串,0
或'index'
表示按行抽样,1
或'columns'
表示按列抽样。
例如,如果你有一个包含1000行的DataFrame,df.sample(n=100)将随机选取其中的100行。如果你想随机抽取数据的30%,则可以使用df.sample(frac=0.3)。
这个函数提供了灵活的方式来随机抽取数据,非常适用于数据分析、数据预处理阶段,尤其是在需要对数据集进行抽样以减小处理数据量或进行随机抽样估计时。
df_poi = pd.read_csv('/home/lizhicheng/QuadFlex/new_label/try/dp_poi_12176.csv')
# 随机选取898行并重置索引
df_sampled = df_poi.sample(n=898).reset_index(drop=True)