读取csv文件
import pandas
# 默认第一行会作为 header, 第一列会作为 index,
# header=None, index_col=False 会禁止默认行为
food_info = pandas.read_csv(file_name)# 返回一个DataFrame对象
n_rows = food_info.head(n) #获取前n行数据,返回的依旧是个DataFrame
column_names = food_info.columns #获取所有的列名
dimensions = food_info.shape #获取数据的shape
- Index
默认情况下,使用pandas.read_csv()
读取csv
文件的时候,会默认将数据的第一行当做列标签,还会为每一行添加一个行标签。我们可以使用这些标签来访问DataFrame中的数据。
Series对象: Each column in a DataFrame is a Series
- 从df中获取 series 对象:
df[col_name]
- 创建 series 对象:
ages = pd.Series([22, 35, 58], name="Age")
- 常用方法:
Series.max(), Series.describe()
DataFrame的增删改查
选择某行数据
data = food_info.loc[0] #使用loc[n]获取第n行数据,如果只是获取一行数据的话,返回Series
#如何选择多行呢,和numpy的语法是一样的
datas = food_info.loc[1:2] #返回DataFrame,返回行标签为1,2的,这个和numpy不一样,而且loc[]也不支持-n
data = food_info.loc[i][j] # i-th row, j-th column
data = food_info.loc[i, j] # 同样是i-th row, j-th column
使用DataFrame.dtypes
获取每列的数据类型
- 选择某列数据如何选择一列数据
使用DataFrame[indices]
获取列数据。注意,要是获取多个列的话selenium_thiamin = food_info[["Selenium_(mcg)",'Thiamin_(mg)']]
,不要少了个中括号。
df['col_name'] # get value
df['col_name'] = df['col_name'].apply(lambda x: func(x)) # modify value
给DataFrame添加列
new_data_frame = pd.concat([data_frame, pd.DataFrame(columns=['new_col1', 'new_col2'])])
# 重新排列 data_frame 的列
new_data_frame.reindex()
如何遍历 DataFrame 中的数据
# 使用 for 是不可行的!!!!!!!!!!!!!!!!!!!!!
for data in data_frame:
pass
# 使用 len 和 loc
for i in range(len(data_frame)):
# 返回的 cur_data 是 series类型,是data_frame中的数据的一个副本
# 对cur_data的更新是不会影响到 data_frame的!!!!!!
cur_data = data_frame.loc[i]
# 使用 .iteriterms()
for i, series in df.iterrows():
print(i, ":", type(series))
注意
关于len()
len(data_frame) # 是data_frame的行数
len(data_frame.loc[0]) #是data_frame的列数
关于set()
set(data_frame) # 返回column name
set(data_frame["column1"]) # 返回第一列中不重复的值
set(data_frame.loc[0]) #返回第一行中不重复的值
如何获取所有列名
DataFrame.columns.values.tolist()
如何重置 dataframe 的索引
https://blog.csdn.net/qq_36523839/article/details/80640139
如何保存成 CSV 文件
使用 data_frame.to_csv()
。为了使用这个方法,首先要创建一个 DataFrame
实例。
import pandas as pd
# from_dict, 使用 dict 把每列的数据准备好
predictions = {}
predictions["id"] = ["001", "002"]
predictions["value"] = ["hello boy", "hello world"]
dataFrame = pd.DataFrame.from_dict(predictions)
print(dataFrame)
# from_record, 准备好每一行的数据
predictions2 = []
predictions2.append(["001", 0, 0])
predictions2.append(["002", 0, 0])
dataFrame2 = pd.DataFrame.from_records(predictions2, columns=["id", "is_man", "is_good"])
print(dataFrame2)
# index_col 是否需要 索引列(就是用来行索引的列), header: 是否需要列名
dataFrame2.to_csv(dumpfilename, index_col=False, header=False)
判断获取的值是否为 nan
res = series['val']
pd.isna(res) # nan 返回 True 否则返回 False
给列重新命名
df.columns=["new_name1", "new_name2"]
df.rename(columns={"old_name": "new_name"})
指定列为 index
df.set_index(["colname1"])
重置index
df.reset_index()
drop
: 如果为False
原来的 行 index 会变为 列 index, 如果为True
: 原来的行 index 丢掉
groupby
df.groupby()
by
: 这些key 会变成 行 index
filter
- 根据 行 或者 列 的名字 过滤
DataFrame.filter(self: ~FrameOrSeries, items=None, like: Union[str, NoneType] = None, regex: Union[str, NoneType] = None, axis=None) → ~FrameOrSeries
# items: 负责精确匹配
# like: string 包含 匹配
# regex: 正则表达式匹配
# axis: (用哪个维度的 index 进行匹配)0 为 row, 1 为 column; 默认情况下 series 为 index, dataframe 为 column
- 根据值进行字段中的值进行过滤
# 根据列的值 挑选想要的行
df.loc[df["col"] == val]
df.loc[df["col"].isin([val1, val2])]
df.loc[True - df["col"].isin([val1, val2])]
# 和上面同一个效果
df.loc[~df["col"].isin([val1, val2])]
映射(map)
.apply
# 对行/列执行操作, lambda x: func(x) ; x 是一行, 或者一列的值
df.apply()
# 对单个元素进行 apply 操作, lambda x: func(x) , x 是单个值
series.apply()
multiindex 索引
https://www.codenong.com/17921010/
参考资料
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html