当前位置:   article > 正文

python小白入门scanpy,我的学习之路_python如何安装scanpy

python如何安装scanpy

第一天  :dIntroduction · HonKit图片https://python.swaroopch.com/   这本书重点看看数据结构就行了 简单入门

第二天GitHub - huangsam/ultimate-python: Ultimate Python study guide for newcomers and professionals alike.Ultimate Python study guide for newcomers and professionals alike. :snake: :snake: :snake: - GitHub - huangsam/ultimate-python: Ultimate Python study guide for newcomers and professionals alike.图片https://github.com/huangsam/ultimate-python非常不错的教程,数据结构部分代码讲解很清楚,可以直接用python运行来理解

 BeginnersGuide/Programmers - Python Wiki各种python学习教程 我就从里面找了几本看 意义好像不太大

https://github.com/huangsam/ultimate-python  简单看看

Pandas Cookbook :: TutsWiki Beta   pandas入门 目前没发现更好的教程

pandas.DataFrame — pandas 1.5.2 documentation

Basics of NumPy Arrays - GeeksforGeeks  如何理解ndarray in numpy nupyarray

第三天

python中数据结构的转换

跟着数据结构那几章 2倍速观看学习操作  list tuple ditc

174-元组-03-元组变量的常用操作_哔哩哔哩_bilibili

 5. 5.数据分析-1.7 ndarray属性操作详解01_哔哩哔哩_bilibili   2倍速观看 看重点就好了

numpy 数据结构的学习

NumPy: the absolute basics for beginners — NumPy v1.24 Manual

以下这几个章节比较经典 推荐多看

  • How to get unique items and counts

  • Transposing and reshaping a matrix

  • How to reverse an array

  • Reshaping and flattening multidimensional arrays

 NumPy Reference — NumPy v1.24 Manual

7.DataFrame的重要属性_哔哩哔哩_bilibili pandas数据的增删改查 切片等常用操作 很全!!

https://www.bilibili.com/video/BV1iK411f7PP?p=14&spm_id_from=pageDriver&vd_source=909d24b4b33e8977adc9d6ea868a6e4d图片https://www.bilibili.com/video/BV1iK411f7PP?p=14&spm_id_from=pageDriver&vd_source=909d24b4b33e8977adc9d6ea868a6e4d

 讲解非常好,很详细!

Essential basic functionality — pandas 1.5.2 documentationhttps://pandas.pydata.org/pandas-docs/stable/user_guide/basics.html pandas操作总结

ndarry

一维数组:增删改查 切片

二维数组:增删改查 切片

多维数组的组合与拆分

(466条消息) 强烈推荐python中学习单细胞分析必看anndata官网教程初探 先理解python中基础的数据结构列表 元组 字典 增删改查 以及numpy和pandas数据结构,再看此教程_YoungLeelight的博客-CSDN博客  https://blog.csdn.net/qq_52813185/article/details/128500883?

第四天

anndata单细胞分析的基本数据结构 重点在线学习

https://anndata.readthedocs.io/en/latest/tutorials/index.html

https://anndata.readthedocs.io/en/latest/tutorials/notebooks/getting-started.html

图片编辑

python中的类与对象

【Python】Python中的类与对象_哔哩哔哩_bilibili

大概看了一下 

 Intro to data structures — pandas 1.5.2 documentation

NumPy Documentation

GitHub - pandas-dev/pandas: Flexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more

  1. for each in adata.obs.columns:
  2. ...: print(adata.obs[each].describe())
  3. ...: print("=============================\n")

第五天 scanpy学习

(469条消息) scanpy学习 教程 就像seurat教程一样_YoungLeelight的博客-CSDN博客图片https://blog.csdn.net/qq_52813185/article/details/128443014

 经典pbmc3k教程

Preprocessing and clustering 3k PBMCs — Scanpy documentation (scanpy-tutorials.readthedocs.io)

我的学习过程详细代码

 step1——在r中运行python环境设置 有点像conda的环境设置

  1. ```{r}
  2. library(rmarkdown)#不运行就保存rmarkdown
  3. rmarkdown::render("tracy.Rmd",
  4. run_pandoc = FALSE,
  5. output_format = "pdf_document")
  6. ```
  7. getwd() #教程地址 https://theislab$github$io/scanpy-in-R/#alternative-approaches
  8. 1#创建python环境
  9. renv::init()
  10. renv::install("reticulate")
  11. 2#使用第二个python环境 #2: C:/Users/yll/AppData/Local/Programs/Python/Python39/python$exe
  12. renv::use_python("C:/Users/yll/AppData/Local/Programs/Python/Python39/python.exe")
  13. 3#安装python环境中的python模块
  14. py_pkgs <- c(
  15. "scanpy",
  16. "python-igraph",
  17. "louvain"
  18. )
  19. reticulate::py_install(py_pkgs)
  20. reticulate::py_install("certifi")#ModuleNotFoundError: No module named 'certifi'
  21. reticulate::py_install("leidenalg")#不可以用vpn 否则会报错
  22. reticulate::py_install("ipython")#安装包
  23. library(reticulate)
  24. sc <- reticulate::import("scanpy")
  25. #adata <- sc$datasets$pbmc3k_processed()
  26. adata=sc$datasets$paul15()
  27. adata
  28. adata$var
  29. rownames(adata$var)
  30. head(adata$X)[1:3,1:10]
  31. head(adata$obs)[1:3,1:10]
  32. dim(adata$X)
  33. str(adata$X)
  34. #####读取下载好的pbmc
  35. np=reticulate::import('numpy')
  36. pd=import('pandas')
  37. sc=import("scanpy")
  38. sc$settings$verbosity <- 3 # verbosity: errors (0), warnings (1), info (2), hints (3)
  39. sc$logging$print_header()
  40. sc$settings$set_figure_params(dpi=80, facecolor='white')
  41. results_file = 'write/pbmc3k$h5ad' # the file that will store the analysis results
  42. adata = sc$read_10x_mtx(
  43. "G:/silicosis/sicosis/gitto/python_study/scanpy_study/data/filtered_gene_bc_matrices/hg19/", # the directory with the `$mtx` file
  44. var_names='gene_symbols' # use gene symbols for the variable names (variables-axis index)
  45. ) # write a cache file for faster subsequent reading
  46. adata
  47. adata$var_names_make_unique() # this is unnecessary if using `var_names='gene_ids'` in `sc.read_10x_mtx`
  48. sc$plotting$highest_expr_genes(adata =adata,n_top = 20,)
  49. sc$pl$highest_expr_genes(adata, n_top=20 )
  50. sc$pp$filter_cells(adata, min_genes=200)
  51. sc$pp$filter_genes(adata, min_cells=3)
  52. adata$var['mt'] = adata$var_names$str$startswith('MT-') # annotate the group of mitochondrial genes as 'mt'
  53. sc$pp$calculate_qc_metrics(adata, qc_vars=adata$var['mt'])
  54. sc$pl$violin(adata, adata$uns['n_genes_by_counts', 'total_counts', 'pct_counts_mt'],
  55. jitter=0.4, multi_panel=True)
  56. sc$pl$scatter(adata, x='total_counts', y='pct_counts_mt')
  57. sc$pl$scatter(adata, x='total_counts', y='n_genes_by_counts')
  58. adata$X
  59. adata$obs
  60. #此处不需要adata=
  61. adata=adata[adata$obs$n_genes_by_counts < 2500, :]
  62. adata[adata$obs$pct_counts_mt < 5, :]
  63. sc$pp$normalize_total(adata, target_sum=1e4)
  64. sc$pp$log1p(adata)
  65. sc$pp$highly_variable_genes(adata, min_mean=0$0125, max_mean=3, min_disp=0$5)
  66. sc$pl$highly_variable_genes(adata)
  67. adata$raw = adata
  68. adata
  69. adata=adata[:, adata$var$highly_variable]
  70. adata

step2 使用 rmarkdown 初步学习 认识了一下scanpy 环境的安装 还有如何导出rmarkdown文件

  1. ---
  2. title: "Untitled"
  3. author: "yll"
  4. date: "2022-12-27"
  5. output:
  6. word_document: default
  7. html_document:
  8. df_print: paged
  9. pdf_document: default
  10. ---
  11. ```{r}
  12. #install.packages("bookdown")
  13. #install.packages("pdflatex")
  14. reticulate::py_install("lxml")
  15. reticulate::py_config()
  16. reticulate::conda_version()
  17. reticulate::conda_python()
  18. ```
  19. ```{r}
  20. #设置r包安装路径
  21. .libPaths()
  22. .libPaths(c("G:/silicosis/sicosis/gitto/python_study/renv/library/R-4.1/x86_64-w64-mingw32","C:/Users/yll/AppData/Local/Temp/RtmpErvVSx/renv-system-library" ,"G:/R_big_packages/","D:/Win10 System/Documents/R/win-library/4.1","C:/Program Files/R/R-4.1.0/library"))
  23. ```
  24. ```{r}
  25. #tinytex::install_tinytex()
  26. ```
  27. ```{r}
  28. #install.packages("rticles")
  29. library(reticulate)
  30. py_install("openpyxl")
  31. ```
  32. \#`{r setup, include=FALSE} #knitr::opts_chunk$set(echo = TRUE) #`
  33. ##python清除所有变量_如何清空python的变量
  34. ```{python}
  35. for key in list(globals().keys()):
  36. if not key.startswith("__"):
  37. globals().pop(key)
  38. ```
  39. ```{python}
  40. import numpy as np
  41. import pandas as pd
  42. import scanpy as sc
  43. ```
  44. ```{python}
  45. sc.settings.verbosity = 3 # verbosity: errors #(0),warnings (1), info (2), hints (3)
  46. sc.logging.print_header()
  47. sc.settings.set_figure_params(dpi=80, facecolor='white')
  48. results_file = 'write/pbmc3k.h5ad' # the file that will store the #analysis results
  49. ```
  50. #Preprocessing
  51. ```{python,echo=T}
  52. adata = sc.read_10x_mtx(
  53. "G:/silicosis/sicosis/gitto/python_study/scanpy_study/data/filtered_gene_bc_matrices/hg19/", # the directory with the `.mtx` file
  54. var_names='gene_symbols', # use gene symbols for the variable names (variables-axis index)
  55. cache=True) # write a cache file for faster subsequent reading
  56. adata
  57. adata.var_names_make_unique() # this is unnecessary if using `var_names='gene_ids'` in `sc.read_10x_mtx`
  58. ```
  59. ```{python,echo=T}
  60. adata
  61. sc.pl.highest_expr_genes(adata, n_top=20, )
  62. ```
  63. ```{python,echo=T}
  64. ```
  65. ## Basic filtering:
  66. ```{python echo=TRUE}
  67. sc.pp.filter_cells(adata, min_genes=200)
  68. sc.pp.filter_genes(adata, min_cells=3)
  69. ```
  70. With pp.calculate_qc_metrics, we can compute many metrics very efficiently.
  71. ```{python echo=TRUE}
  72. adata.var['mt'] = adata.var_names.str.startswith('MT-') # annotate the group of mitochondrial genes as 'mt'
  73. sc.pp.calculate_qc_metrics(adata, qc_vars=['mt'], percent_top=None, log1p=False, inplace=True)
  74. ```
  75. ```{python echo=TRUE}
  76. sc.pl.violin(adata, ['n_genes_by_counts', 'total_counts', 'pct_counts_mt'],
  77. jitter=0.4, multi_panel=True)
  78. ```
  79. ```{python}
  80. sc.pl.scatter(adata, x='total_counts', y='pct_counts_mt')
  81. sc.pl.scatter(adata, x='total_counts', y='n_genes_by_counts')
  82. adata = adata[adata.obs.n_genes_by_counts < 2500, :].copy()
  83. adata = adata[adata.obs.pct_counts_mt < 5, :].copy()
  84. ```
  85. ```{python}
  86. adata = adata[adata.obs.n_genes_by_counts < 2500, :].copy()
  87. adata = adata[adata.obs.pct_counts_mt < 5, :].copy()
  88. ```
  89. ```{python echo=TRUE}
  90. sc.pp.normalize_total(adata, target_sum=1e4)
  91. sc.pp.log1p(adata)
  92. sc.pp.highly_variable_genes(adata, min_mean=0.0125, max_mean=3, min_disp=0.5)
  93. sc.pl.highly_variable_genes(adata)
  94. ```
  95. ```{python}
  96. adata.raw = adata
  97. ```
  98. ##do the filtering
  99. ```{python echo=FALSE}
  100. adata = adata[:, adata.var.highly_variable].copy()
  101. ```
  102. ```{python}
  103. adata = adata[:, adata.var.highly_variable].copy()
  104. ```
  105. ```{python echo=FALSE}
  106. sc.pp.regress_out(adata, ['total_counts', 'pct_counts_mt'])
  107. sc.pp.scale(adata, max_value=10)
  108. ```
  109. ```{python}
  110. adata
  111. mydata=adata.obs
  112. ```
  113. ```{r}
  114. rdata=seq(1,9,1)
  115. ```
  116. #
  117. ```{r}
  118. #library(knitr)
  119. #library(reticulate)
  120. ```
  121. ```{python}
  122. r.rdata
  123. print("=================")
  124. mydata
  125. ```
  126. ```{r }
  127. py$mydata$n_genes
  128. rdata=subset(py$mydata,'n_genes'>1000)
  129. py$results_file
  130. py$mydata
  131. ```
  132. ```{r}
  133. py$mydata
  134. ```
  135. ```{r}
  136. #install.packages("knitr")
  137. package_version("knitr")
  138. ```
  139. ```{python echo=TRUE}
  140. import seaborn as sns
  141. #fmri=sns.load_dataset("fmri")#和网路有关可能需要翻墙 ,否则报错
  142. ```
  143. ```{python}
  144. #fmri=sns.load_dataset()#和网路有关可能需要翻墙 ,否则报错
  145. ```
  146. ```{r}
  147. py$sns
  148. ```
  149. ```{r}
  150. py$mydata
  151. ```
  152. ```{r}
  153. #py_save_object(py$adata, "adata.pickle", pickle = "pickle")
  154. ```

step4 和哔哩哔哩视频学习了python中基础的数据结构 如列表 元组 字典 及其常见操作:增加 删除 改 变  切片语法

  1. ---
  2. title: "Untitled"
  3. author: "yll"
  4. date: "2022-12-28"
  5. output: html_document
  6. ---
  7. ```{r setup, include=FALSE}
  8. knitr::opts_chunk$set(echo = TRUE)
  9. ```
  10. ```{python}
  11. name="xiaoming"
  12. type(name)
  13. acb=True
  14. type(acb)
  15. 2**32
  16. type(2**32)
  17. type(2**64)
  18. ```
  19. #根据内容获取索引
  20. #根据索引获取内容
  21. ```{python}
  22. name=["zhansan","lisi","wangwu","afda","fa"]
  23. name
  24. name.index("lisi")
  25. #根据内容获取索引
  26. name.index("zhansan" or "lisi")
  27. name.index("zhansan" and "lisi")
  28. type(name)
  29. name[1]
  30. name[1:5:1]
  31. #修改索引内容
  32. ```{python}
  33. name
  34. name[1]
  35. ```
  36. #获取多个元素的索引
  37. ```{python}
  38. lst=['zhansan', 'lisi', 'wangwu', 'afda', 'fa']
  39. lst
  40. for index, element in enumerate(lst):
  41. print(index, element)
  42. a=index, element
  43. print(a)
  44. ############333
  45. elements = [3, 5, 7]
  46. indices = [index for index, element in enumerate(lst) if element in elements]
  47. indices
  48. ###################
  49. numbers = [1, 2, 3, 4, 5, 6]
  50. # 获取多个元素的索引
  51. for i, number in enumerate(numbers):
  52. if number in (4, 5):
  53. print(i) # 输出 3 4
  54. ```
  55. ```{python}
  56. name.append("wangxiaoer")
  57. name
  58. #在列表的指定位置插入数据
  59. name.insert(1,"小美眉")
  60. name
  61. temp_list=["Afda","Afd",("Afaf"),{"AFa":"faafafa"}]
  62. temp_list
  63. name.extend(temp_list)
  64. name
  65. #name.index("afaf")
  66. len(name)
  67. name[1]
  68. name[len(name)-1]
  69. ```
  70. #删除列表中元素
  71. ```{python}
  72. name
  73. name.remove("fa")
  74. name
  75. #pop默认删除最后一个
  76. name.pop()
  77. name
  78. name.pop(4)#删除指定索引位置的元素 并打印该元素
  79. name.clear()
  80. name
  81. ```
  82. #del关键字来删除列表中的元素
  83. #del本质上是从内存中删除变量,后续就不能再使用该变量
  84. ```{python}
  85. name.reverse()
  86. name
  87. name=["zhansan","lisi","wangwu","afda","fa"]
  88. name
  89. name.index("lisi")
  90. name
  91. del name[1]
  92. name
  93. del name
  94. #name就不复存在了
  95. ```
  96. ```{python}
  97. len(name)
  98. name
  99. #某个元素在列表中出现的次数
  100. name.count("afd")
  101. #name.remove()会删除第一个出现的值
  102. ```
  103. ```{python}
  104. #sort 默认升序
  105. name
  106. name.sort()
  107. name
  108. #降序排序
  109. name.sort(reverse=True)
  110. name
  111. #逆序 反转
  112. name
  113. name.reverse()
  114. name
  115. name[::-1]
  116. ```
  117. #取值 取索引 统计记数
  118. ```{python}
  119. #python中的关键字有哪些 key
  120. #使用这些关键字时候 不需要括号
  121. import keyword
  122. print(keyword.kwlist)
  123. len(keyword.kwlist)
  124. info_tuple
  125. info_tuple[1]
  126. print(info_tuple)
  127. print(info_tuple[:])
  128. print(info_tuple[::])
  129. info_tuple.index(18)
  130. name
  131. name.index("fa")
  132. ```
  133. #循环遍历
  134. ```{python}
  135. #迭代遍历iteration 使用for关键字
  136. #顺序从列表中依次获取数据
  137. name
  138. for my_name in name:
  139. print("我的名字叫 %s" %my_name)
  140. ```
  141. ```{python}
  142. list=["AFaf",1,2,1]
  143. list
  144. ```
  145. #元组数据 tuple 元素不可以修改,
  146. #只可以从中获取数据,不可以修改
  147. #数据之间 逗号 , 分隔
  148. ```{python}
  149. #可以保存不同类型数据
  150. info_tuple=("afa","zhansan",18,1.75)
  151. info_tuple
  152. type(info_tuple)
  153. info_tuple[1]
  154. info_tuple[::-1]
  155. info_tuple
  156. empty_tuple=()
  157. empty_tuple
  158. #只包含一个数据的元组 加上逗号即可
  159. single_tuple=(5)
  160. type(single_tuple)
  161. single=(5,)
  162. type((5,))
  163. type(single)
  164. info_tuple
  165. print(info_tuple)
  166. len(info_tuple)
  167. ```
  168. #遍历元组
  169. ```{python}
  170. for my_info in info_tuple:
  171. #元组中通常保存的数据类型是不同的
  172. print(my_info)
  173. ```
  174. #格式化字符串 $s占位符 后面的()本质上就是个元组
  175. ```{python}
  176. print("%s 年龄是 %d, 身高是 %.2f" %("xiaoming",16,180) )
  177. info_tuple=("xiaoming",16,180)
  178. print("%s 年龄是 %d, 身高是 %.2f" %info_tuple )
  179. ```
  180. #数据结构相互转换
  181. #元组与列表之间的相互转换
  182. ```{python}
  183. num_list=[1,34,563,1,1]
  184. num_list
  185. num_tuple=tuple(num_list)
  186. num_tuple
  187. type(list)
  188. del list
  189. list(num_tuple)
  190. ```
  191. #字典是无序的对象集合 列表是有顺序的
  192. #字典的key必须是唯一的
  193. ```{python}
  194. xiaoming={"name":"小明",}
  195. print(xiaoming)
  196. xiaoming_dict={"name":"小明",
  197. "age":19,
  198. "gender": "nan",
  199. "height": 190}
  200. print(xiaoming)
  201. print (xiaoming_dict)
  202. #取值
  203. xiaoming_dict["name"]
  204. #在取值时候,如果指定的key不存在,则会报错
  205. #增加 删除
  206. xiaoming_dict["age"]=00
  207. xiaoming_dict
  208. xiaoming_dict["name"]="xiaoxiaoming"
  209. xiaoming_dict
  210. #删除 指定删除的key即可 如果指定的key不存在 则报错
  211. xiaoming_dict.pop("name")
  212. xiaoming_dict
  213. ```
  214. ```{python}
  215. #统计键值对的数量
  216. len(xiaoming_dict)
  217. xiaoming_dict
  218. #合并字典 如果被合并的字典包含与原字典相同的key,则覆盖
  219. name.extend(xiaoming)
  220. name
  221. temp_dict={"height":19010,
  222. "agse":10,
  223. "name":"xiaoming"}
  224. temp_dict
  225. xiaoming_dict
  226. xiaoming_dict.update(temp_dict)
  227. xiaoming_dict
  228. xiaoming_dict.items()
  229. #删除字典
  230. xiaoming_dict
  231. xiaoming_dict.clear()
  232. xiaoming_dict
  233. ```
  234. #循环遍历字典
  235. ```{python}
  236. for i in xiaoming_dict:
  237. print(i)
  238. print("---")
  239. print(xiaoming_dict[i])
  240. xiaoming_dict.update(temp_dict)
  241. xiaoming_dict
  242. xiaoming_dict["age"]
  243. for k in xiaoming_dict:
  244. print("%s---%s" % (k,xiaoming_dict[k]))
  245. for k in xiaoming_dict.items():
  246. print(k)
  247. print(" %s,====,%s" % k) #格式化输出 不用加逗号,
  248. print("%s,---,%s",k)
  249. xiaoming_dict.values()
  250. type(xiaoming_dict.values())
  251. type(xiaoming)
  252. xiaoming_dict.values()
  253. globals().keys()
  254. for i in xiaoming_dict.values():
  255. print(i)
  256. ```
  257. #列表和字典嵌套操作
  258. #多个字典放在一个列表中
  259. ```{python}
  260. card_list=[
  261. {"name":"zhangsan",
  262. "phenumb":235215325},
  263. {"name":"lisi",
  264. "phenumb":87342}
  265. ]
  266. card_list
  267. for card_info in card_list:
  268. print(card_info,"=======+")
  269. print(card_info["name"])
  270. card_info
  271. ```
  272. #字符串
  273. ```{python}
  274. str1="hello python hello world"
  275. str1
  276. str1[4]
  277. str1[::-1]
  278. for char in str1:
  279. print(char)
  280. len(str1)
  281. str1.count("o")
  282. str1.count("lo")
  283. str1.capitalize()
  284. str1.index("lo")
  285. str1.upper()
  286. str1.isspace()
  287. str1.istitle()
  288. str1
  289. str1.upper()
  290. str1
  291. str1.split()
  292. str1
  293. str_list=str1.split()
  294. print(str_list)
  295. " ".join(str_list)
  296. ```
  297. #字符串的切片
  298. ```{python}
  299. ```
  300. #公共方法 也就是内置函数
  301. ```{python}
  302. len()
  303. del() #加了括号就与关键字不一样了 但是作用是完全相同的
  304. char
  305. char = str1.split()
  306. char
  307. del(char[1])
  308. char
  309. del char[2]
  310. char
  311. max(char)
  312. max(str1)
  313. str1
  314. 1>6
  315. [111,1]>[3,1,1]
  316. max(str('"1,"fs",342"'))
  317. ```
  318. ```{python}
  319. name
  320. name[0]="agaf"
  321. name
  322. ```
  323. name[::-1]
  324. name['afda']
  325. name.count("a")
  326. print(name[2])
  327. name.index()
  328. ```
  329. ```{python}
  330. name_list=[]
  331. name_list.
  332. ```

  step5 跟着bilibili视频学习 numpy中的ndarray数据结构 数组结构 数据 没有看完 因为后面感觉有点南?而且太深入了,我好像用不到。主要学习了增删改查 切片语法 ,shape属性。进入学习疲劳期之后 就换了个pandas继续学习

心得:学习这些数据结构的过程就大概分为:

1.是什么 ,定义是啥?数据结构 长啥样子, 

2.该对象属性的学习

3.该对象方法的学习

4.通用函数的学习

字符串 操作:正则表达式

数字的操作

列表操作

元组操作 以及和列表的区别

字典的常见操作

数组操作

  1. #https://www.bilibili.com/video/BV1dd4y1Q7vt/?p=9&spm_id_from=pageDriver&vd_source=909d24b4b33e8977adc9d6ea868a6e4d
  2. import numpy as np
  3. ary=np.array([1,3,4,2,6,7])
  4. ary
  5. type(ary)
  6. ary.data
  7. ary.shape
  8. ary.shape=(2,3)
  9. ary
  10. type(ary)
  11. ary.shape=(6,)
  12. ary
  13. ary*3
  14. len(ary)
  15. ary<3
  16. #创建数组的方法
  17. ary=np.arange(0,9,1)
  18. ary
  19. ary=np.array([1,42,55,2542,253,414,1])
  20. ary
  21. ary=np.zeros(20)
  22. ary
  23. ary.shape=(4,5)
  24. ary
  25. ary=np.ones((2,4),dtype='float32')
  26. ary
  27. ary=np.ones((2,4))
  28. ary
  29. np.ones(10)
  30. np.ones(10,10)
  31. ary=np.ones((10,10))*5
  32. #1001/5
  33. np.ones(5)/5
  34. np.zeros_like(ary)#维度长得像ary
  35. np.ones_like(ary)
  36. #常见的属性
  37. shape
  38. dtype
  39. size
  40. len
  41. a=np.arange(0,9)
  42. a
  43. a.shape
  44. a.shape=(3,3)
  45. a
  46. #错误的而修改数据类型方式
  47. a.dtype
  48. a.dtype="float32" #说明这种强制转换是不对的!!
  49. a
  50. a.dtype
  51. #
  52. b=a.astype('float32')
  53. a
  54. b
  55. #size属性
  56. a
  57. a.size
  58. len(a)
  59. a.shape=(3,3)
  60. a.size
  61. a
  62. len(a)
  63. a.size
  64. a.shape
  65. a
  66. #index 索引
  67. c=np.arange(1,28)
  68. c
  69. c.shape=(3,9)
  70. c
  71. c.shape=(3,3,3)
  72. c
  73. #取4 怎么取
  74. c[0]
  75. c[0][1][0]
  76. c[0,1,0]
  77. c[0][1,0]
  78. c
  79. c[0,1][0]
  80. c.shape
  81. a=np.arange(0,8)
  82. a
  83. a.shape=(2,4)
  84. a
  85. a[1,3]
  86. a[1][3]
  87. ##复合数据类型
  88. data=[
  89. ("zhangsan",[1,23,4],19),
  90. ("lisi",[2,5,6],18),
  91. ("ww",[23,635,1],19)
  92. ]
  93. data
  94. a=np.array(data,dtype=object)
  95. a
  96. a.__index__
  97. a[0,0]
  98. a[2][2]
  99. a[2,2]
  100. a=np.array(data,dtype="U8,3int32,int32")
  101. a
  102. #第二种设置dtype的方式
  103. data
  104. type(data)
  105. b=np.array(data,dtype=[("name","str_",8),
  106. ("scores","int64",3),
  107. ("ages","int32",1)#数字代表元素的个数
  108. ])
  109. b
  110. b["name"]
  111. b['ages']
  112. b["ages"][1]
  113. b[0]
  114. b
  115. b["name"]
  116. #取出ww的年龄
  117. b
  118. b[2]
  119. b[2]["ages"]
  120. b[2][2]
  121. b[2,2]
  122. class(b)
  123. type(b)
  124. b.shape
  125. a.shape
  126. type(b[2])
  127. type(b[2][2])
  128. #第三种设置dtype的方式
  129. a=np.array(data,dtype={
  130. "names":["name","scores",'age'],
  131. "formats":["U8","int64","int32"] })
  132. a
  133. type(a)
  134. a[1]
  135. a[1][""age""]
  136. a[1]['age']
  137. a[1][1]
  138. type(a[1]['age'])
  139. type(a[1][1])
  140. type(a)
  141. a
  142. a[1,1]
  143. a[1:]
  144. a[1:,]
  145. a
  146. import numpy as np
  147. data=["2022-01-10","2012","2022-09",
  148. "2022-10-01 10:10:00"]
  149. data
  150. a=np.array(data)
  151. a
  152. b=a.astype("M8[D]")
  153. b.dtype
  154. b[1] - a[1]
  155. ####ndarray 的维度
  156. ##视图变维(数据共享)view reshape() ravel()
  157. #只是对原始数据的映射/投影。并没有单独的空间来存储原始数据
  158. # a和b会互相影响
  159. a=np.arange(1,10)
  160. a
  161. a.shape
  162. b=a.reshape(3,3)
  163. a
  164. b
  165. #很多方法会得到一个新的返回值,而不会改变原有数据
  166. a.reshape(3,3)
  167. print(a,"---->a")
  168. a[0]
  169. a[0]=999
  170. a
  171. print(b,"--------->b")
  172. b.ravel()#抻平数组
  173. c=b.ravel()
  174. c
  175. print(c,"------>c")
  176. a
  177. c[1]=53434
  178. c
  179. ##复制变维(数据独立)fatten() 把数据撑平了
  180. b
  181. b.flatten()
  182. d=b.flatten()
  183. d
  184. d[4]=10000
  185. d
  186. print(d,"------>d")
  187. b
  188. #就地变维 涂改直接改变当前数组的维度
  189. c
  190. c.shape=(3,3)
  191. c.resize((9,))
  192. c
  193. c.data
  194. #########ndarry 数组切片操作 二维数组的切片
  195. a=np.arange(0,9)
  196. a
  197. a[1:5]
  198. a[:3]
  199. a[6:]
  200. a[::-1]
  201. a[:-4]
  202. a
  203. a[:-4:-2]
  204. a
  205. a[:-4:-1]
  206. a[-4:-1]
  207. a[::]
  208. a[1:4]
  209. a
  210. ##二维数组的切片
  211. a.resize(3,3)
  212. a
  213. a[:2,:2]
  214. a[::,::2]
  215. a[:,:]
  216. a[::2,::2]
  217. a[[2]]
  218. a[[1]]
  219. a
  220. a[0] #取第0
  221. a[[0,]]
  222. a[[0,1]]#取第0行和第1
  223. a[[0,1,2]]
  224. a[:]
  225. a[:,]
  226. a[:,:]
  227. a[,::1]
  228. a[::1,]
  229. type(a[[2]])
  230. a
  231. a[[2]]
  232. a
  233. a[[1,2]]
  234. a[[2,1]]
  235. a=np.arange(0,201)
  236. a.resize(100,2,refcheck=False)
  237. a
  238. a[::,0]
  239. ##ndarry数组的掩码操作
  240. a=np.arange(0,10)
  241. a
  242. mask=[True,False]
  243. import numpy as np
  244. a=np.arange(1,100)
  245. a
  246. mask=a % 3==0
  247. mask
  248. a
  249. a[mask]
  250. #100以内 37的公倍数
  251. a
  252. mask=(a % 3==0) & (a % 7==0)
  253. a[mask]
  254. a
  255. a.all()
  256. #基于索引的掩码
  257. names=np.array(["apple",
  258. "mate30","ioeoij","FAs"])
  259. names
  260. rank=[0,1,3,2]
  261. names[rank]
  262. #多维数组的组合与拆分

scanpy annadata

step6 跟随视频学习pandas 干货有很多 但是我好像只学习了三分之二 因为感觉后面的东西不是自己需要的。主要学习了:pandas中的Series和dataframe结构。增删改查 切片操作 。index shape axis columns iloc loc属性 以及describe head 方法 我现在更需要实操 。在实战中锻炼这几天的学习内容。

第七天就开始学习python中anndata单细胞包

 25.数据的排序_哔哩哔哩_bilibili25.数据的排序是【宝藏级】这是我看过的最好的Python基础Pandas教程!全程干货细讲,带你迅速掌握Pandas数据处理库的第25集视频,该合集共计42集,视频收藏或关注UP主,及时了解更多相关视频内容。图片https://www.bilibili.com/video/BV1iK411f7PP?p=25&spm_id_from=pageDriver&vd_source=909d24b4b33e8977adc9d6ea868a6e4d

  1. #https://www.bilibili.com/video/BV1iK411f7PP?p=20&spm_id_from=pageDriver&vd_source=909d24b4b33e8977adc9d6ea868a6e4d
  2. #serise对象 属于pandas中的数据结构
  3. import pandas as pd
  4. data=["Afas","afdsa","wangwu"]
  5. s=pd.Series(data=data,index=[1,2,3])
  6. s
  7. data=[12,324,12]
  8. index=["zhangsan","lisi","wangwu"]
  9. s=pd.Series(data,index)
  10. s
  11. #位置索引 取值 增删改
  12. s[0]
  13. s[1]
  14. #根据index获取相对应的zhi
  15. s["lisi"]
  16. #获取多个标签所对应的值 【】里面使用列表来提取
  17. s
  18. s[ ["zhangsan","lisi"] ]
  19. #切片索引
  20. s[ 0:2:1 ]
  21. #标签索引 切片
  22. s["zhangsan":"lisi"]
  23. s.index
  24. type(s.index)
  25. s.values
  26. #dataframe
  27. #既有行索引 又有列索引
  28. DataFrame(data=None,
  29. index: 'Axes | None' = None,
  30. columns: 'Axes | None' = None,
  31. dtype: 'Dtype | None' = None, copy: 'bool | None' = None) -&gt; 'None'
  32. #列表方式创建dataframe对象
  33. data=[["xiaotaiyang",23,12],["afaf",31,12],["fa",12,12],]
  34. columes=["mingcheng","danjia","shuliang"]
  35. df=pd.DataFrame(data=data,columns=columes)
  36. df
  37. #字典方式创建dataframe对象
  38. data={ "名称":["xiaotaiy","shubiao","xiaodao"],
  39. "danjain":[320,321,132],
  40. "数量":[34,24,24]}
  41. pd.DataFrame(data)
  42. data={"名称":["xiaotaiy","shubiao","xiaodao"],
  43. "danjain":[320,321,132],
  44. "数量":[34,24,24],
  45. "公司名称":"chaoshi"}
  46. pd.DataFrame(data)
  47. #dataframe的属性
  48. '''
  49. values
  50. dtypes
  51. index
  52. columns
  53. T
  54. head
  55. tail
  56. shape
  57. info
  58. '''
  59. df.info
  60. df
  61. df.values
  62. df.dtypes
  63. df.index
  64. list(df.index)
  65. #修改行索引
  66. df.index=[1,2,3]
  67. df
  68. #数据规整
  69. pd.set_option('display.unicode.east_asian_width',True)
  70. df.T
  71. df
  72. #
  73. df.head
  74. print (df.head)
  75. df.head()
  76. df.head(2)
  77. df.tail()
  78. #
  79. df.shape
  80. df.shape[0] #多少行
  81. df.shape[1]
  82. (3, 4,3)[2]
  83. #查看索引 内存xinx
  84. df.info
  85. #dataframe中的重要函数
  86. '''
  87. describe 每列的汇总信息 dataframe类型
  88. count 返回每一列的非空值个数
  89. sum 返回每一列的和
  90. max 返回每一列的最大值
  91. min 返回每一列的最小值'''
  92. data={"名称":["xiaotaiy","shubiao","xiaodao"],
  93. "danjain":[320,321,132],
  94. "数量":[34,24,24],
  95. "公司名称":"chaoshi"}
  96. pd.DataFrame(data)
  97. df=pd.DataFrame(data)
  98. df
  99. #数据规整 数据格式整理数据清理
  100. pd.set_option('display.unicode.east_asian_width',True)
  101. df
  102. df.describe()
  103. df.count()
  104. df.sum()
  105. df
  106. df.min()
  107. ##导入外部数据
  108. #.xls .xlsx
  109. import pandas as pd
  110. ?pd.read_excel(io,sheet_name,header)
  111. pd.describe_option()
  112. df=pd.read_excel(io="D:/Win10 System/Desktop/yll_version1/briefings in bioinformatics/Supplementary Table.xlsx",
  113. header=None) #header=None
  114. '''
  115. .libPaths()
  116. .libPaths(c("G:/silicosis/sicosis/gitto/python_study/renv/library/R-4.1/x86_64-w64-mingw32","C:/Users/yll/AppData/Local/Temp/RtmpErvVSx/renv-system-library" ,"G:/R_big_packages/","D:/Win10 System/Documents/R/win-library/4.1","C:/Program Files/R/R-4.1.0/library"))
  117. '''
  118. df.head()
  119. type(df)
  120. df.shape
  121. df.keys()
  122. df.keys
  123. df.values
  124. #导入指定的数据
  125. #导入一列数据
  126. df=pd.read_excel(io="D:/Win10 System/Desktop/yll_version1/briefings in bioinformatics/Supplementary Table.xlsx",
  127. header=None,usecols=[1]) #header=None
  128. df
  129. df[1]
  130. #导入多列
  131. df=pd.read_excel(io="D:/Win10 System/Desktop/yll_version1/briefings in bioinformatics/Supplementary Table.xlsx",
  132. header=None,usecols=[1,2]) #header=None
  133. df
  134. ##读取csv文件
  135. import pandas as pd
  136. # 读取pandas内置的CSV数据
  137. import pandas as pd
  138. import io
  139. # 读取pandas内置的CSV数据
  140. ##读取html文件
  141. import pandas as pd
  142. url="http://www.espn.com/nba/salaries"
  143. df=pd.DataFrame()
  144. df
  145. #dataframe添加数据
  146. df=df.append(pd.read_html(url, header=0 ))
  147. '''
  148. 进入类似于conda的环境
  149. 1#创建python环境
  150. renv::init()
  151. '''
  152. df
  153. df.head()
  154. #保存成csv文件
  155. df.to_csv("nbasalrary.csv",index=False)
  156. ##数据提取 增删改删 切片抽取
  157. df.head()
  158. data=[[45,52,234],[234,43,2],[43,243,924] ]
  159. index=["张三",'lisi',"wangwu"]
  160. columns=["yuwen","shuxue","yingyu"]
  161. df=pd.DataFrame(data=data,index=index,columns=columns)
  162. df
  163. pd.set_option('display.unicode.east_asian_width',True)
  164. df
  165. type(df)
  166. #提取行数据
  167. df.loc["lisi"]
  168. df.iloc[0]
  169. df.iloc[1]
  170. df.iloc[:]
  171. df.iloc[::]
  172. df.iloc[::2]
  173. #提取多行数据 谁和谁
  174. df.loc[["lisi","wangwu"]]
  175. df.iloc[1:3]
  176. df
  177. df.iloc[[1,2]]
  178. df.iloc[1,2]
  179. ##提取联系多行数据 谁到谁 切片
  180. df
  181. df.loc["lisi":"wangwu"] #此时只有一对方括号 包含首尾
  182. df.iloc[1:2] #使用索引时候 含头不含尾
  183. df.iloc[1::]
  184. df.iloc[1:]
  185. df
  186. df.iloc[::2]
  187. df.iloc[::-1]
  188. df.iloc[:1]
  189. df.iloc[:2]
  190. #抽取想要的列
  191. data=[[45,52,234],[234,43,2],[43,243,924] ]
  192. index=["张三",'lisi',"wangwu"]
  193. columns=["yuwen","shuxue","yingyu"]
  194. df=pd.DataFrame(data=data,index=index,columns=columns)
  195. df
  196. pd.set_option('display.unicode.east_asian_width',True)
  197. df
  198. type(df)
  199. df.columns
  200. df["yuwen"]
  201. df
  202. df.iloc[0:2]
  203. #提取列数据时候 可以直接使用列名提取 而行不可以
  204. #行必须使用loc参数才可以
  205. #提取多列数据 直接使用列名提取
  206. df
  207. df[["shuxue","yuwen"]]
  208. df
  209. #提取所有行的数学和语文
  210. df.loc[::,["shuxue","yuwen"]]
  211. df.loc[:,["shuxue","yuwen"]]
  212. df.iloc[:,[0,2]]
  213. #提取连续的列
  214. df.iloc[:,1:2]
  215. ##提取区域数据
  216. #张三的数学
  217. df
  218. df.loc["张三","shuxue"]
  219. type(df.loc["张三","shuxue"])
  220. #张三wangwu的yuwen和shuxue成绩
  221. df.loc[["张三","wangwu"],["yuwen","shuxue"]]
  222. df
  223. df.loc["张三":"wangwu","yuwen":]
  224. df.iloc[0:2,:]
  225. df.iloc[0:2,::]
  226. df.iloc[0:2,::2]
  227. #提取非连续的数据
  228. df.iloc[[0,2],:]
  229. df
  230. df[:,[0,2]]
  231. df.loc[:,["shuxue","yingyu"]]
  232. df[["shuxue","yingyu"]]
  233. #提取满足条件的数据
  234. df
  235. #提取语文大于60的数据
  236. df.describe()
  237. df
  238. df["yuwen"]
  239. df["yuwen"]>60
  240. #df.loc[::,df["yuwen"]>60]
  241. df
  242. #提取语文成绩》60的所有学生信息
  243. df.loc[df["yuwen"]>60]
  244. #语文和数学都大于60de
  245. df
  246. df.loc[:]
  247. df.iloc[0:2]
  248. df
  249. df.loc[df["yuwen"]>60]
  250. #多个判断需要括号括起来
  251. df.loc[(df["yuwen"]>60) & (df["shuxue"]<60)]
  252. ###############3数据的增 修 删 改
  253. columns=["yuwen","shuxue","yingyu"]
  254. index=["张三",'lisi',"wangwu"]
  255. data=[[45,52,234],[234,43,2],[43,243,924] ]
  256. df=pd.DataFrame(data=data,index=index,columns=columns)
  257. df
  258. ##增加列数据
  259. df
  260. #直接赋值的方式 增加一列政治chengji
  261. df["zhengzhi"]=[34,242,1321]
  262. df
  263. df.tail()
  264. #使用loc属性,在dataframe的最后一行增加
  265. df.shape
  266. df.loc[:,"maogai"]=[34,423,22]
  267. df
  268. #在指定位置插入数据 insert
  269. lst=[123,312,3312]
  270. df.insert(1,"历史",lst) #在索引为1的列上添加 历史 列内容为:lst
  271. df
  272. ##########按行增加数据
  273. import numpy as np
  274. df.loc["lisi"]
  275. df
  276. df.loc["陈六"]=list(np.arange(0,6))
  277. df
  278. #增加多行数据
  279. #新建一个dataframe
  280. df
  281. new_dataframe=pd.DataFrame(
  282. index=["zhaoqian","sunli"],
  283. columns=list(df.columns),
  284. data=[list(np.arange(0,6)),
  285. list(np.arange(6,12))]
  286. )
  287. new_dataframe
  288. df
  289. df.append(new_dataframe) #append 追加行
  290. df
  291. lst=[123, 312, 3312]
  292. lst
  293. lst.append(342)
  294. lst
  295. lst.shape
  296. ary=np.array(lst)
  297. ary
  298. ary.shape
  299. ary.shape=(2,2)
  300. ary
  301. ary[:,]
  302. ary[:,::]
  303. columns=["yuwen","shuxue","yingyu"]
  304. index=["张三",'lisi',"wangwu"]
  305. data=[[45,52,234],[234,43,2],[43,243,924] ]
  306. df=pd.DataFrame(data=data,index=index,columns=columns)
  307. df
  308. ############修改数据
  309. #修改列标题
  310. df
  311. #修改语文
  312. df["yuwen"]="语文" #这样是修改yuwen这一列的内容,而不是改列标题
  313. #改yingyu列标题
  314. df.columns
  315. df
  316. lst="yuwen 历史 shuxue yingyu zhengzhi maogai".split()[::-1]
  317. lst
  318. lst[::-1]
  319. df.columns="yuwen 历史 shuxue yingyu zhengzhi maogai".split()[::-1]
  320. df
  321. df.index
  322. #rename
  323. df
  324. df.rename(columns={"maogai":"maogai(上)"})
  325. df
  326. #加上inplace参数,直接修改dataframe
  327. df.rename(columns={"maogai":"maogai(上)"},inplace=True)
  328. df
  329. #修改行标题 也就是修改行名
  330. #直接赋值
  331. list('1234')
  332. df
  333. df.index=list('1234')
  334. df
  335. #有点像设置索引的方法
  336. #rename方法 可以修改任意行名和列名 需要通过字典来指定新的名字
  337. df.rename({"1":"11",
  338. "2":["fadsa,afd"]},inplace=True,axis=0)
  339. df
  340. ###修改数据内容
  341. #修改一整行数据
  342. columns=["yuwen","shuxue","yingyu"]
  343. index=["张三",'lisi',"wangwu"]
  344. data=[[45,52,234],[234,43,2],[43,243,924] ]
  345. df=pd.DataFrame(data=data,index=index,columns=columns)
  346. df
  347. df.loc["lisi"]=100
  348. df
  349. df.loc["lisi"]=[19,2,423]
  350. df
  351. df.loc["lisi",:]
  352. df
  353. df.loc["lisi",:]=100
  354. df
  355. df.loc["lisi",:]=list("432")
  356. df
  357. df.iloc[1]=100
  358. df
  359. df.iloc[1,:]
  360. df
  361. df.iloc[1,:]=list("123")
  362. df
  363. ##修改列数据
  364. df
  365. df["yuwen"]=100
  366. df
  367. df.loc[:,"yuwen"]
  368. df
  369. df.loc[:,"yuwen"]=list("!23")
  370. df
  371. #修改某一处 比如 修改lisi的yuwen成绩
  372. df
  373. df.loc["lisi","yuwen"]
  374. df.loc["lisi","yuwen"]=100
  375. df
  376. df.iloc[1,0]=1000
  377. df
  378. ###删除数据 axis 0表示行 1 表示列
  379. #drop参数说明
  380. #有点像设置索引的方法
  381. labels 行或者列标签
  382. axis
  383. index
  384. columns
  385. inplace
  386. columns=["yuwen","shuxue","yingyu"]
  387. index=["张三",'lisi',"wangwu"]
  388. data=[[45,52,234],[234,43,2],[43,243,924] ]
  389. df=pd.DataFrame(data=data,index=index,columns=columns)
  390. df
  391. #删除数学列 删除 去除 去掉
  392. df.drop(["shuxue"],axis=1)
  393. df
  394. df.drop(labels=["shuxue"],axis=1)
  395. #
  396. df.drop(columns=["shuxue"])
  397. df
  398. #
  399. df.drop(labels="shuxue",axis=1)
  400. df
  401. df.drop(["shuxue"],axis=1,inplace=True)
  402. df.drop()
  403. ##删除行
  404. df
  405. df.drop(["lisi"],axis=0) #顺序反了也不行
  406. df.drop(axis=0,["lisi"])
  407. df
  408. df.drop(axis=0,labels=["lisi"],inplace=True)
  409. df
  410. df.drop(index="lisi")
  411. df.drop(index="lisi",axis=0)
  412. df.drop(index="lisi",axis=0,inplace=True)
  413. df
  414. df.drop()
  415. ##带条件的删除
  416. columns=["yuwen","shuxue","yingyu"]
  417. index=["张三",'lisi',"wangwu"]
  418. data=[[45,52,234],[234,43,2],[43,243,924] ]
  419. df=pd.DataFrame(data=data,index=index,columns=columns)
  420. df
  421. df
  422. df["shuxue"]
  423. df.loc[:,"shuxue"]
  424. df
  425. df.loc["lisi"]
  426. df.loc["lisi",]
  427. df.loc["yuwen"]
  428. df
  429. df.loc[:,'yuwen']
  430. df.loc[,"yuwen"] #行中的冒号不可以省略,列中的切片可以省略
  431. #删除数学<60分的数据
  432. df["shuxue"]<60
  433. df
  434. df["shuxue"]>60
  435. #也就是取出数学>60的行
  436. df.loc[df["shuxue"]>60,:]
  437. #<60
  438. df.index
  439. df[df["shuxue"]<60]
  440. df.loc[df["shuxue"]<60,]
  441. df[df["shuxue"]<60].index
  442. df[df["shuxue"]<60].index[0]
  443. df
  444. df.drop(df[df["shuxue"]<60].index[0],axis=0)
  445. #删除数学<60分的数据
  446. df["shuxue"]<60
  447. (df["shuxue"]<60).index
  448. df[df["shuxue"]<60]
  449. df[df["shuxue"]<60].index
  450. df.drop(index=df[df["shuxue"]<60].index,axis=0)
  451. df
  452. ###数据清洗qingchu
  453. ##python清除所有变量_如何清空python的变量
  454. for key in list(globals().keys()):
  455. if not key.startswith("__"):
  456. globals().pop(key)
  457. import pandas as pd
  458. df=pd.read_csv("nbasalrary.csv",header=None)
  459. df
  460. df.head()
  461. pd.set_option("display.unicode.east_asian.width",True)
  462. df.loc[1:5,1:5]
  463. df.index
  464. df.columns
  465. df
  466. df.loc[1,:]
  467. df.columns=df.loc[1,:]
  468. df.head()
  469. df.columns
  470. df.index
  471. type(df)
  472. df.shape
  473. df[[0,1]]
  474. #查看是否有缺失值
  475. df.info
  476. df.info()
  477. ###判断是否有缺失值 true就表示是缺失值naa
  478. df.isnull()
  479. df.notnull() #不为缺失值就为true
  480. #缺失值的处理方式
  481. #删除缺失值
  482. df.dropna()
  483. df.dropna(inplace=True)
  484. df
  485. df.shape
  486. #
  487. df=pd.read_csv("nbasalrary.csv",header=None)
  488. df
  489. df=df.loc[:,:3]
  490. df.head()
  491. df.isnull()
  492. df.isnull().info()
  493. df.isnull().describe()
  494. df.describe()
  495. df
  496. df.shape
  497. df.columns=df.loc[1,]
  498. df
  499. df.dropna(inplace=True)
  500. df
  501. df.shape
  502. df.columns
  503. df.loc[3,:]=['None',None,bool('null'),"fdsa"]
  504. df.loc[4,:]=[None,'afda',None,'fda']
  505. df.head()
  506. df.dropna()
  507. df.notnull()
  508. df["NAME"].notnull()
  509. df.head()
  510. #提取NAME中不为nan的数据
  511. df["NAME"].notnull
  512. df["NAME"].notnull()
  513. df["NAME"].isna
  514. df["NAME"].isna()
  515. df.head()
  516. df.loc[df["NAME"].notna(),:]
  517. #填充na fillna
  518. df
  519. df=pd.read_csv("nbasalrary.csv",header=None)
  520. df.columns=df.loc[1,]
  521. df
  522. ##把所有的缺失值填充为o0
  523. df
  524. df.loc[:,:].fillna(0)
  525. df
  526. ##重复值的处理
  527. #判断是否有重复值
  528. df.duplicated()
  529. #去除全部的重复值
  530. df.shape
  531. df
  532. df.drop_duplicates()
  533. #去除指定列的重复数据
  534. df=df.drop_duplicates(["NAME"])
  535. df.shape
  536. #去除指定列的重复数据 保留重复行中的最后一行
  537. df.columns
  538. df.drop_duplicates(['TEAM'])
  539. df
  540. df=df.drop_duplicates("TEAM",keep='last')
  541. df
  542. #直接删除 保留一个副本
  543. df
  544. df.drop_duplicates(["RK"],inplace=True)
  545. df
  546. df1=df.drop_duplicates(['TEAM'],inplace=False)
  547. df1
  548. df
  549. ############异常值的检测和处理
  550. ###pandas索引设置
  551. #如果索引是唯一的,pandas会使用哈希表优化
  552. #如果索引不是唯一的,但是有序, 使用二分查找算法
  553. #如果索引是完全随机的,那么每次查询都需要扫描数据表
  554. import pandas as pd
  555. s1=pd.Series([19,12,132],
  556. index=["a","b","c"])
  557. s1
  558. s2=pd.Series([19,12,132],
  559. index=["a","b","c"])
  560. s2
  561. print(s1+s2)
  562. ##重新设置索引
  563. reindex(labels=None, index=None, columns=None,
  564. axis=None, method=None, copy=None,
  565. level=None, fill_value=nan, limit=None, tolerance=None)
  566. s=pd.Series([11,2,3,333],index=list("abcd"))
  567. s
  568. s.reindex(list("fsas"))
  569. s=pd.Series([11,2,3,333],index=list("1234"))
  570. s
  571. s.reindex(list("23541"))
  572. s=pd.Series([11,12,3234],index=[1,22,3])
  573. s
  574. type(s)
  575. #重新设置索引
  576. s
  577. print(range(1,8))
  578. s.reindex(range(1,6)) #多出来的为nan
  579. print(s.reindex(range(1,7)))
  580. #使用o进行填充
  581. print(s.reindex(range(1,7),fill_value=0))
  582. s=s.reindex(range(1,8),fill_value=5)
  583. s
  584. #向前填充和向后填充
  585. s
  586. s.shape
  587. s.reindex(range(1,10))
  588. s.reindex(range(1,9),method="ffill") #向前填充
  589. s.reindex(range(1,11),method="bfill")#向后填充
  590. #dataframe对象重新设置索引
  591. data=[[12,132,13],[23,23,432],[34,24,63]]
  592. data
  593. index=["heng1",'heng2',"heng3"]
  594. index
  595. columns=["c1","c2","c3"]
  596. columns
  597. df=pd.DataFrame(columns=columns,
  598. index=index,
  599. data=data)
  600. df
  601. pd.set_option("display.unicode.east_asian_width",True)
  602. df
  603. #重新设置索引
  604. #设置行索引
  605. import numpy as np
  606. df
  607. df.index
  608. df.reindex(np.array((1, 2, 3,'heng1', 'heng2', 'heng3')))
  609. df.reindex(['heng1', 'heng2', 'heng3',333,113])
  610. df.index
  611. df.index[1]
  612. df.loc[0]
  613. df
  614. df.iloc[0]
  615. df.iloc[1]
  616. df
  617. df.iloc[0,:]
  618. #重新设置列索引
  619. data=[[12,132,13],[23,23,432],[34,24,63]]
  620. data
  621. index=["heng1",'heng2',"heng3"]
  622. index
  623. columns=["c1","c2","c3"]
  624. columns
  625. df=pd.DataFrame(columns=columns,
  626. index=index,
  627. data=data)
  628. df
  629. df
  630. df.columns
  631. df.reindex(columns=['c1', "fas",'c2', 'c3'])
  632. #有点像df.drop() 删除某行或者哪些列
  633. ##同时设置 行索引和列索引
  634. df.index
  635. df.columns
  636. df.reindex(index=['heng1',"fasa", 'heng2', 'heng3'],
  637. columns=['c1',"fas", 'c2', 'c3'])
  638. df.reindex(index=['heng1',"fasa", 'heng2', 'heng3'],
  639. columns=['c1',"fas", 'c2', 'c3'],
  640. fill_value=0)
  641. #设置某行或某列为索引
  642. set_index(keys, *, drop: 'bool' = True,
  643. append: 'bool' = False, inplace:
  644. 'bool' = False,
  645. verify_integrity: 'bool' = False) -> 'DataFrame | None'
  646. df = pd.DataFrame({'month': [1, 4, 7, 10],
  647. 'year': [2012, 2014, 2013, 2014],
  648. 'sale': [55, 40, 84, 31]})
  649. df
  650. #设置某列为行索引
  651. df
  652. df.shape
  653. df.set_index("month") #,inplace=True
  654. df.set_index("month").index
  655. df
  656. df.shape
  657. df.index
  658. #创建多个行索引
  659. df
  660. df.set_index(['year', 'sale'])
  661. df.set_index(['year', 'sale']).index
  662. ##设置某行为列索引
  663. set_axis(labels, *, axis: 'Axis' = 0,
  664. inplace: 'bool | lib.NoDefault' = <no_default>,
  665. copy: 'bool | lib.NoDefault' = <no_default>)
  666. df
  667. df.index
  668. df
  669. df.set_axis(labels=df.loc[3,:],axis=1)
  670. df.set_axis(labels=df.loc[3,:],axis="columns")
  671. #Create a MultiIndex using an Index and a column:
  672. df
  673. df.index
  674. df.set_index(df.index)
  675. df.index
  676. pd.Index([1, 2, 3, 4])
  677. df.set_index([pd.Index([1, 2, 3, 4]), 'year'])
  678. df.set_axis()
  679. #数据清洗之后设置索引
  680. df
  681. df.reindex(np.arange(0,8),fill_value=9)
  682. df=df.reindex(np.arange(0,6),method="ffill")
  683. df.columns
  684. df=df.reindex(columns=['month', "fsa",'year', 'sale'])
  685. df
  686. df = pd.DataFrame([('bird', 389.0),
  687. ('bird', 24.0),
  688. ('mammal', 80.5),
  689. ('mammal', np.nan)],
  690. index=['falcon', 'parrot', 'lion', 'monkey'],
  691. columns=('class', 'max_speed'))
  692. df
  693. #重新设置索引之后 旧索引默认变成索引列
  694. df.reset_index()
  695. df
  696. #drop参数可以避免旧索引变成新的列
  697. df.reset_index(drop=True)
  698. df
  699. df.dropna()
  700. df.dropna().reset_index()
  701. df.dropna().reset_index(drop=True)
  702. index = pd.MultiIndex.from_tuples([('bird', 'falcon'),
  703. ('bird', 'parrot'),
  704. ('mammal', 'lion'),
  705. ('mammal', 'monkey')],
  706. names=['class', 'name'])
  707. columns = pd.MultiIndex.from_tuples([('speed', 'max'),
  708. ('species', 'type')])
  709. df = pd.DataFrame([(389.0, 'fly'),
  710. ( 24.0, 'fly'),
  711. ( 80.5, 'run'),
  712. (np.nan, 'jump')],
  713. index=index,
  714. columns=columns)
  715. df
  716. df.index
  717. df.columns

step7第七天 anndata学习 这个官网教程太给力了,我用的是Linux服务器 安装了conda环境 使用 ipython进行学习。主要是实操,anndata其实是numpy和pandas的升级版,其操作很多都是基于numpy和pandas以及基本的python数据结构的。主要属性:X,  obs,  var , obs_names,  var_names.

Getting started with anndata — anndata 0.9.0.dev37+g312e6ff documentation必看入门anndata

anndata for R • anndata anndata与R

covid19已经出圈了anndata - Annotated data — anndata 0.9.0.dev37+g312e6ff documentation 

COVID-19 Cell Atlas

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/441560
推荐阅读
相关标签
  

闽ICP备14008679号