多少行
row_count = len(data.index)
多少列
columns_count = len(data.columns)
def getColumn_ByIndex(df,column_index):
#根据索引获取列
row_count = len(df.index) #行数
columns_count = len(df.columns) #列数
if(column_index >= columns_count):
s1 = "索引 "+ str(column_index)+' 超出范围 [0:'+ str(columns_count-1)+"]"
raise Exception(s1)
#取值范围 iloc[0:row_count+1,0:column_index+1]
#取值范围 iloc[行索引开始:行索引结尾,列索引起始:列索引结尾] [索引区间范围 开始 至 结尾-1)
return df.iloc[0:row_count+1,column_index:column_index+1] #+1是因为 它取值范围是 [包前:不包后)
取某一行的值
j1 = getColumn_ByIndex(df, 0) #取第一行的值 得到一个list
def getRow_ByIndex(df,row_index):
#根据下标获取行
row_count = len(df.index) #行数
if(row_index >= row_count):
s1 = "索引 "+ str(row_index)+' 超出范围 [0:'+ str(row_count-1)+"]"
raise Exception(s1)
#[索引区间范围 开始 至 结尾-1)
return df.iloc[row_index:row_index+1] #+1是因为 它取值范围是 [包前:不包后)
取某一列的值
h1 = getRow_ByIndex(df,0) # 取第一列的值 得到一个list
获取某一格,data.iloc[行,列]
box1 = df.iloc[3,1] #取第四行第二列的值
iloc 用法
v1 = df.iloc[1:100] #取索引为 1 -99 行的数据
print(v1)
v2 = df.iloc[:1] #取索引为0 行的数据
print(v2)
v3 = df.iloc[[0,100],0:2] #取第0行 的 第0列值 和 第1列值 并且取 第100行 的 第0列值 和 第1列值
#换种说法 取第0行 的 0至1列 值 并且取 第100行 的 0至1列 值
print(v3)
v3 = df.iloc[0:100,0:1] #取 行索引0 至 行索引99的 列索引为0的值,也就是获取前100行第一列的值
print(v3)
每列的列名称
print(data.columns)
根据列名称 获取某列
print(data['姓名'])
列数据的格式
data['B'].dtype
输出所有列的 列名称 及类型
for i in df.columns:
print(f'列名称:{i},该列数据类型:{df[i].dtype}')
更改数据格式:
df['price'] = df['price'].astype('int')
df['date'] = df['date'].astype(str)
更改全部的数据格式:
for i in data.columns:
data[i] = data[i].astype('float')
print(data[i].dtypes)
删除某行
df.drop([0,1],inplace=True) #把删除掉索引为0的行
删除某列
df.drop(data.columns[0],axis=1,inplace=True) #把删除掉索引为0的列
#函数定义:DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False)
#默认情况下删除某一行或者几行,如果要删除列必须axis=1
#注意:inplace为真则表示在原数据上操作,为False表明在原数据的copy上操作
计数,平均值,标准差,最小值,最大值
data['姓名'].count() #计数
data['prince'].mean() #平均值
df['prince'].std() #标准差
df['prince'].min()
df['prince'].max()
用列prince的均值对NA进行填充:
df['prince'].fillna(df['prince'].mean())
清除city字段的字符空格:
df['city']=df['city'].map(str.strip)
删除后出现的重复值:
df['city'].drop_duplicates()
删除先出现的重复值:
df['city'].drop_duplicates(keep='last')
数据替换:
df['city'].replace('sh', 'shanghai')
大小写转换:
df['city']=df['city'].str.lower()
data.info()可以查看特征的概要:
RangeIndex: 41266 entries, 0 to 41265
Columns: 502 entries, DATE to NYSE.ZTS
dtypes: float64(501), int64(1)
memory usage: 158.0 MB
从上述结果可知:该数据集数据共502列,41266行,502列分别
数据的前五行
data.head()
所在行号,姓名是列名,李燕是其中的一个名字所在的行号,但是不算标题行
hang =data[data['姓名'].isin(['李燕'])].index[0]
删除某列
data.drop(['姓名'],inplace=True)
名字列中 ,如果名字是两个字,那么名字之间就加空格
def func1(string):
if len(string) ==2:
return string[0]+' '+string[1]
else:
return string
data['姓名']=data['姓名'].map(func1)
import pandas as pd
# 创建一个 DataFrame
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'gender': ['Female', 'Male', 'Male', 'Male']
})
# 使用布尔索引进行筛选
female_df = df[df['gender'] == 'Female']
print(female_df)
# 使用多个条件进行筛选
young_male_df = df[(df['gender'] == 'Male') & (df['age'] < 35)]
print(young_male_df)
# 使用 isin() 方法进行筛选
selected_df = df[df['name'].isin(['Alice', 'David'])]
print(selected_df)
在上面的示例代码中,使用布尔索引 df['gender'] == 'Female'
来筛选性别为女性的数据;使用多个条件 df['gender'] == 'Male' & df['age'] < 35
来筛选性别为男性且年龄小于 35 岁的数据;使用 df['name'].isin(['Alice', 'David'])
方法来筛选名字为 Alice 或 David 的数据。
除了上述方法外,还可以使用其他条件判断操作符,例如:
==
!=
>
<
>=
<=
使用这些操作符可以实现更复杂的条件判断。
'int': 有符号整数或无符号整数类型
'float': 浮点数类型
'object': 是一种通用的数据类型,用于存储各种数据类型的混合数据,例如字符串、列表和字典等。通常情况下,当 Pandas 无法确定一个列的数据类型时,会将其指定为object
类型。明确字符串类型:df['date'] = df['date'].astype(str)
'bool': 布尔类型,True 或 False
'datetime64': 日期和时间类型
'timedelta': 时间间隔类型
'category': 分类类型,用于存储分类变量的数据
import pandas as pd
# 创建一个包含整数的 Series
s1 = pd.Series([1, 2, 3, 4])
print(s1)
# 创建一个包含浮点数的 Series
s2 = pd.Series([1.1, 2.2, 3.3, 4.4])
print(s2)
# 创建一个包含字符串的 Series
s3 = pd.Series(['apple', 'banana', 'cherry', 'date'])
print(s3)
# 创建一个包含布尔值的 Series
s4 = pd.Series([True, False, True, False])
print(s4)
# 创建一个包含日期和时间的 Series
s5 = pd.Series(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'], dtype='datetime64')
print(s5)
# 创建一个包含时间间隔的 Series
s6 = pd.Series([pd.Timedelta('1 days'), pd.Timedelta('2 days'), pd.Timedelta('3 days'), pd.Timedelta('4 days')])
print(s6)
# 创建一个包含分类变量的 Series
s7 = pd.Series(['cat', 'dog', 'cat', 'dog'], dtype='category')
print(s7)