一句python,一句R︱模块导入与查看、数据读写出入、数据查看函数、数据类型、遍历文件
先学了R,最近刚刚上手python,所以想着将python和R结合起来互相对比来更好理解python。最好就是一句python,对应写一句R。
pandas中有类似R中的read.table的功能,而且很像。
————————————————————————————————————————————————————
一、数据类型
(来源:Python 变量类型)
Python有五个标准的数据类型:
- Numbers(数字)
- String(字符串)
- List(列表) 使用:[] list()
- Tuple(元组) 使用:() tuple()
- Dictionary(字典) 使用:{ } dict()
其中pandas和numpy中的数组格式 以及Series DataFrame都是基于此之上而得到的。其中比R要多:Tuple、Dictionary两种类型。
1、数字格式 int() float() long() complex()
Python支持四种不同的数字类型:
- int(有符号整型)
- long(长整型[也可以代表八进制和十六进制])
- float(浮点型)
- complex(复数)
一些数值类型的实例:
| int | long | float | complex |
|---|---|---|---|
| 10 | 51924361L | 0.0 | 3.14j |
| 100 | -0x19323L | 15.20 | 45.j |
| -786 | 0122L | -21.9 | 9.322e-36j |
| 080 | 0xDEFABCECBDAECBFBAEl | 32.3+e18 | .876j |
| -0490 | 535633629843L | -90. | -.6545+0J |
| -0x260 | -052318172735L | -32.54e100 | 3e+26J |
| 0x69 | -4721885298529L | 70.2-E12 | 4.53e-7j |
- 长整型也可以使用小写"L",但是还是建议您使用大写"L",避免与数字"1"混淆。Python使用"L"来显示长整型。
- Python还支持复数,复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型
2、字符串 str()
字符串或串(String)是由数字、字母、下划线组成的一串字符。
可参考:
一句python,一句R︱python中的字符串操作、中文乱码
3、列表型 [] =R=c()向量
List(列表) 是 Python 中使用最频繁的数据类型。
列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(所谓嵌套)。
list = [ 'abcd', 786 , 2.23, 'john', 70.2 ] tinylist = [123, 'john']
4、元组——()/ tuple() =R= 固定的c()
元组是另一个数据类型,类似于List(列表)。
元组用"()"标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。
以下是元组无效的,因为元组是不允许更新的。而列表是允许更新的: #!/usr/bin/python # -*- coding: UTF-8 -*- tuple = ( 'abcd', 786 , 2.23, 'john', 70.2 ) list = [ 'abcd', 786 , 2.23, 'john', 70.2 ] tuple[2] = 1000 # 元组中是非法应用 list[2] = 1000 # 列表中是合法应用
相当于固定的c()
5、Python元字典 { } =R= list()
字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。
两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典用"{ }"标识。字典由索引(key)和它对应的值value组成。
生成方式一:用在函数、for循环中
dict = {}
dict['one'] = "This is one"
dict[2] = "This is two"
但是dict有一个好处,就是不仅可以list[1] 还可以list[strings],其中可以装下字符。
生成方式二:{}
tinydict = {'name': 'john','code':6734, 'dept': 'sales'}
输出方式:
print dict[2] # 输出键为 2 的值
print tinydict # 输出完整的字典
print tinydict.keys() # 输出所有键
print tinydict.values() # 输出所有值
以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。
| 函数 | 描述 |
|---|---|
|
int(x [,base]) |
将x转换为一个整数 |
|
long(x [,base] ) |
将x转换为一个长整数 |
|
float(x) |
将x转换到一个浮点数 |
|
complex(real [,imag]) |
创建一个复数 |
|
str(x) |
将对象 x 转换为字符串 |
|
repr(x) |
将对象 x 转换为表达式字符串 |
|
eval(str) |
用来计算在字符串中的有效Python表达式,并返回一个对象 |
|
tuple(s) |
将序列 s 转换为一个元组 |
|
list(s) |
将序列 s 转换为一个列表 |
|
set(s) |
转换为可变集合 |
|
dict(d) |
创建一个字典。d 必须是一个序列 (key,value)元组。 |
|
frozenset(s) |
转换为不可变集合 |
|
chr(x) |
将一个整数转换为一个字符 |
|
unichr(x) |
将一个整数转换为Unicode字符 |
|
ord(x) |
将一个字符转换为它的整数值 |
|
hex(x) |
将一个整数转换为一个十六进制字符串 |
|
oct(x) |
将一个整数转换为一个八进制字符串 |
延伸
一种特殊的,字典的生成方式:
dict(dim=[1, 3, 227, 227])
————————————————————————————————————————————————————
二、模组、模块导入与复查
下载模块是一个麻烦的事情,一般用pip来执行,但是貌似每次下载都是一堆麻烦提示,于是转而用pycharm,很方面,傻瓜版.
一般模块就像R中的函数包,需要先调用
library(packages)=import pandas as pd
查看模块是否载入,一般import pandas,如果该包下载就不会用任何提示,如果没有加载成功,就会报错:
ImportError: No module named da
查看已有的加载包
help("modules") #查看安装包
按照R语言中曾经存在的问题:
1、如何取消模块的加载?
2、模块的位置是在哪?
3、模块的信息如何调用出来?就像R中的介绍一样,有没有比较详细的说明?
————————————————————————————————————————
三、数据读入、写出
1、python的read_csv
#数据导入
df = pd.read_csv('./cpu.csv',header=0)
#中文encoding = 'gbk'
约等于R中的read.csv('./cpu.csv',header=T,encoding= UTF-8)
pd.read_csv("C:\\Users\\long\\Desktop\\ex2.csv",header=None,names=["a","b","c","e","message"],index_col=["message","a"])其中:header=None,就代表没有行名称,names代表另外命名行名称,index_col代表列。
其中读入数据的时候,不要出现中文,不然读不进去。
会出现以下的错误:
IOError: File C:\Users\long\Desktop\ch06\ex2.csv does not exist
如果出现中文,中文导入、导出都需要加上:
df = pd.read_csv("001.csv",encoding="gbk")
dataname.to_csv("001.csv",encoding="gbk")
2、python的to_csv
to_csv=write.csv
#数据导出
df.to_csv('uk_rain.csv') #write.csv(df,"uk_rain.csv")
约等于R中的write.csv(df,"uk_rain.csv"),其中df是数据集的名称,跟前面的read_csv不太一样。
更一般的表现形式:
pd.read_table("./marks.csv", sep=",")
3、txt文件导入——np.loadtxt
用numpy中的一个函数可以实现txt文件的导入。
np.loadtxt("/caffe/examples/lmdb_test/train/synset.txt", str, delimiter='\t')
————————————————————————————————————————————————————
四、数据查看——行列名、查看
R中常有的两种方式——$ []:
data$colnames
data["colnames",]
函数使用办法都是:sum(data)
python中通过 . 传导式的:
data.sum
1、数据查看
查看数据的前5个,后5个。
data.head(5)
data.tail(5)
在R中为head(data)/tail(data)
2、数据类型
type(data)
3、列数量、行数量 len(R中的length)
len(data) #行数
len(data.T) #列数
其中data.T是数据转置,就可以知道数据的行数、列数。
————————————————————————————————————————
延伸一:遍历文件方法
笔者作为小白在遍历文件的时候,看到几种办法挺好的:os.listdir 和 os.walk
os.listdir返回的是该文件夹下的所有文件名称; os.walk可以返回父文件夹路径+文件夹下路径,貌似比较给力。
网上有帮他们打包成函数的博客:Python遍历目录的4种方法实例介绍
#!/usr/bin/python
import os
from glob import glob
def printSeparator(func):
def deco(path):
print("call method %s, result is:" % func.__name__)
print("-" * 40)
func(path)
print("=" * 40)
return deco
@printSeparator
def traverseDirByShell(path):
for f in os.popen('ls ' + path):
print f.strip()
@printSeparator
def traverseDirByGlob(path):
path = os.path.expanduser(path)
for f in glob(path + '/*'):
print f.strip()
@printSeparator
def traverseDirByListdir(path):
path = os.path.expanduser(path)
for f in os.listdir(path):
print f.strip()
@printSeparator
def traverseDirByOSWalk(path):
path = os.path.expanduser(path)
for (dirname, subdir, subfile) in os.walk(path):
#print('dirname is %s, subdir is %s, subfile is %s' % (dirname, subdir, subfile))
print('[' + dirname + ']')
for f in subfile:
print(os.path.join(dirname, f))
if __name__ == '__main__':
path = r'~/src/py'
traverseDirByGlob(path)
traverseDirByGlob(path)
traverseDirByListdir(path)
traverseDirByOSWalk(path)
1、traverseDirByGlob、traverseDirByOSWalk两种函数可以拿到带全部路径的文件,类似:
/data/trainlmdb/val/test_female/image_00009.jpg
2、traverseDirByListdir(path)可以拿到里面的文件名:
image_00009.jpg
当然这个函数里面是print出来的。基于笔者的小白级写函数方法,笔者改进:
def traverseDirByGlob(path):
path = os.path.expanduser(path)
list={}
i=0
for f in glob(path + '/*'):
list[i]=f.strip()
i=i+1
return list
就可以跟其他的def函数一样return出来。
一句python,一句R︱模块导入与查看、数据读写出入、数据查看函数、数据类型、遍历文件的更多相关文章
- python学习日记(模块导入)
什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码(.p ...
- python基础之import模块导入和包的调用
模块概念 在Python中,一个.py文件就称之为一个模块(Module).使用模块组织代码,最大的好处是大大提高了代码的可维护性 模块一共三种:python标准库.第三方模块.应用程序自定义模块. ...
- Python开发基础-Day16import模块导入和包的调用
模块概念 在Python中,一个.py文件就称之为一个模块(Module).使用模块组织代码,最大的好处是大大提高了代码的可维护性 模块一共三种:python标准库.第三方模块.应用程序自定义模块. ...
- python - 路径处理 和 模块导入
# -*- coding:utf-8 -*- '''@project: jiaxy@author: Jimmy@file: study_模块导入.py@ide: PyCharm Community E ...
- python中如何添加模块导入路径?
python中自定义模块导入路径的方式主要有以下3种: (1)使用sys.path.append() 随着程序执行,会动态地添加模块导入的路径,但是程序执行结束后就会立即失效(临时性的) import ...
- Python 学习之urllib模块---用于发送网络请求,获取数据(5)
查询城市天气最后一节 需要导入上一节的结果city10.py #!/usr/bin/python# -*- coding: UTF-8 -*-import urllib.requestfrom ci ...
- Python 学习之urllib模块---用于发送网络请求,获取数据(4)
承接将查询城市编码的结果保存到文件中,以字典的形式保存,目的是为了在查询某个城市的天气的时候,能够通过输入的城市名称,找到对应的城市编码.所以此结果字典的数据结构,就是city={城市名称:城市编码} ...
- Python 学习之urllib模块---用于发送网络请求,获取数据
1.urllib urllib是Python标准库的一部分,包含urllib.request,urllib.error,urllib.parse,urlli.robotparser四个子模块. (1) ...
- python 的两个模块xlwt,xlrd,写入和读取Excel数据
http://www.cnblogs.com/fireme/p/3887284.html 这上面写的很全,不过我只需要简单的读和写的操作就ok了,下面是我写的读和写入Excel操作 读取Excel数据 ...
随机推荐
- ABP框架源码学习之修改默认数据库表前缀或表名称
ABP框架源码学习之修改默认数据库表前缀或表名称 1,源码 namespace Abp.Zero.EntityFramework { /// <summary> /// Extension ...
- IIS6/7 配置操作
关于httpHandlers.handlers和httpModules.modules的那些配置中的各种问题 在web.config中配置httpHandlers.handlers和httpMod ...
- C# 语法学习整理
1.协变与逆变的概念 文章地址:https://segmentfault.com/a/1190000007005115 **************************************** ...
- JDBC学习笔记(三)
获取数据库的元信息metadata,里面有数据库特性的描述信息,如是否支持事务,是否支持批处理等. Connection conn = DriverManager.getConnection(url, ...
- BZOJ 3640: JC的小苹果 [概率DP 高斯消元 矩阵求逆]
3640: JC的小苹果 题意:求1到n点权和\(\le k\)的概率 sengxian orz的题解好详细啊 容易想到\(f[i][j]\)表示走到i点权为j的概率 按点权分层,可以DP 但是对于\ ...
- 模拟器配置使用Fildder进行抓包,包含Https+证书
1.首先,百度检索.参考别人的,大致上都是到安装证书就失败了.我后面只说几个关键点. 2.安装证书,必须设置屏幕密码.我最开始使用把cef拷贝到,手机结果出现bug,安装不了.后来采用了在手机内部访问 ...
- Linux设置DNS地址及清理DNS缓存方法
1.设置DNS地址 编辑vim /etc/resolv.conf 文件. 增加DNS地址:nameserver ip. 2.清理DNS缓存 清理dns缓存: 通过重启nscd服务来达到清理dns缓存的 ...
- 机器学习实践之Logistic回归
关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2017年12月17日 19:18:31所撰写内容(http://blog.cs ...
- Git团队协作之GitFlow & SoucceTree
GitFlow 定义了一个围绕项目发布的严格的分支模型,仍然使用中央仓库作为开发者的交互中心 GitFlow分支 Master分支 Hotfix紧急修改 Release分支 Develop开发分支 F ...
- dedecms文章页调用上一篇和下一篇文章
dedecms文章页调用上一篇和下一篇文章,解析后是链接形式的上下篇 {dede:prenext get='pre'/} {dede:prenext get='next'/}