先学了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︱模块导入与查看、数据读写出入、数据查看函数、数据类型、遍历文件的更多相关文章

  1. python学习日记(模块导入)

    什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码(.p ...

  2. python基础之import模块导入和包的调用

    模块概念 在Python中,一个.py文件就称之为一个模块(Module).使用模块组织代码,最大的好处是大大提高了代码的可维护性 模块一共三种:python标准库.第三方模块.应用程序自定义模块. ...

  3. Python开发基础-Day16import模块导入和包的调用

    模块概念 在Python中,一个.py文件就称之为一个模块(Module).使用模块组织代码,最大的好处是大大提高了代码的可维护性 模块一共三种:python标准库.第三方模块.应用程序自定义模块. ...

  4. python - 路径处理 和 模块导入

    # -*- coding:utf-8 -*- '''@project: jiaxy@author: Jimmy@file: study_模块导入.py@ide: PyCharm Community E ...

  5. python中如何添加模块导入路径?

    python中自定义模块导入路径的方式主要有以下3种: (1)使用sys.path.append() 随着程序执行,会动态地添加模块导入的路径,但是程序执行结束后就会立即失效(临时性的) import ...

  6. Python 学习之urllib模块---用于发送网络请求,获取数据(5)

    查询城市天气最后一节 需要导入上一节的结果city10.py #!/usr/bin/python# -*- coding: UTF-8 -*-import urllib.requestfrom  ci ...

  7. Python 学习之urllib模块---用于发送网络请求,获取数据(4)

    承接将查询城市编码的结果保存到文件中,以字典的形式保存,目的是为了在查询某个城市的天气的时候,能够通过输入的城市名称,找到对应的城市编码.所以此结果字典的数据结构,就是city={城市名称:城市编码} ...

  8. Python 学习之urllib模块---用于发送网络请求,获取数据

    1.urllib urllib是Python标准库的一部分,包含urllib.request,urllib.error,urllib.parse,urlli.robotparser四个子模块. (1) ...

  9. python 的两个模块xlwt,xlrd,写入和读取Excel数据

    http://www.cnblogs.com/fireme/p/3887284.html 这上面写的很全,不过我只需要简单的读和写的操作就ok了,下面是我写的读和写入Excel操作 读取Excel数据 ...

随机推荐

  1. ABP框架源码学习之修改默认数据库表前缀或表名称

    ABP框架源码学习之修改默认数据库表前缀或表名称 1,源码 namespace Abp.Zero.EntityFramework { /// <summary> /// Extension ...

  2. IIS6/7 配置操作

    关于httpHandlers.handlers和httpModules.modules的那些配置中的各种问题   在web.config中配置httpHandlers.handlers和httpMod ...

  3. C# 语法学习整理

    1.协变与逆变的概念 文章地址:https://segmentfault.com/a/1190000007005115 **************************************** ...

  4. JDBC学习笔记(三)

    获取数据库的元信息metadata,里面有数据库特性的描述信息,如是否支持事务,是否支持批处理等. Connection conn = DriverManager.getConnection(url, ...

  5. BZOJ 3640: JC的小苹果 [概率DP 高斯消元 矩阵求逆]

    3640: JC的小苹果 题意:求1到n点权和\(\le k\)的概率 sengxian orz的题解好详细啊 容易想到\(f[i][j]\)表示走到i点权为j的概率 按点权分层,可以DP 但是对于\ ...

  6. 模拟器配置使用Fildder进行抓包,包含Https+证书

    1.首先,百度检索.参考别人的,大致上都是到安装证书就失败了.我后面只说几个关键点. 2.安装证书,必须设置屏幕密码.我最开始使用把cef拷贝到,手机结果出现bug,安装不了.后来采用了在手机内部访问 ...

  7. Linux设置DNS地址及清理DNS缓存方法

    1.设置DNS地址 编辑vim /etc/resolv.conf 文件. 增加DNS地址:nameserver ip. 2.清理DNS缓存 清理dns缓存: 通过重启nscd服务来达到清理dns缓存的 ...

  8. 机器学习实践之Logistic回归

        关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2017年12月17日 19:18:31所撰写内容(http://blog.cs ...

  9. Git团队协作之GitFlow & SoucceTree

    GitFlow 定义了一个围绕项目发布的严格的分支模型,仍然使用中央仓库作为开发者的交互中心 GitFlow分支 Master分支 Hotfix紧急修改 Release分支 Develop开发分支 F ...

  10. dedecms文章页调用上一篇和下一篇文章

    dedecms文章页调用上一篇和下一篇文章,解析后是链接形式的上下篇 {dede:prenext get='pre'/} {dede:prenext get='next'/}