cjsonio下载(cjsonh)

发布时间:2023-12-08

cjsonio下载(cjsonh)

更新:2022-11-14 22:36

本文目录一览:

1、C#怎么解析Json并提取所有内容到字典或List,要具体代码。 2、JSON解析器json-c 3、有没有免费云存储JSON,并能随时编辑和调用该JSON的网站? 4、pandas常用函数汇总

C#怎么解析Json并提取所有内容到字典或List,要具体代码。

//需要引用附件dll

TextReader reader = File.OpenText("json.txt");
JsonReader readerJson = new JsonTextReader(reader);
Dictionary<object, object> dict = new Dictionary<object, object>();
object temp = new object();
while (readerJson.Read())
{
    if (readerJson.Value != null)
    {
        switch (readerJson.TokenType)
        {
            case JsonToken.PropertyName:
                dict.Add(readerJson.Value, new object());
                temp = readerJson.Value;
                break;
            default:
                dict[temp] = readerJson.Value;
                break;
        }
        Console.WriteLine(readerJson.TokenType + "\t" + readerJson.Value);
    }
}

效果图:

JSON解析器json-c

JSON-C实现了一个引用计数对象模型,它允许您轻松地使用C语言来构建JSON对象,将它们输出为JSON格式的字符串,并将JSON格式字符串解析回JSON对象的C语言表示形式。它的目标是符合 RFC 7159 标准。 使用automake的编译过程如下: 使用cmake编译的过程如下: cmake可选的几个编译选项为: 要使用json-c,最简单的方式是包含json.h头文件即可,或者最好是下列更具体的头文件之一: 详细且全面的API介绍文档: JSON-C支持的JSON对象类型有7种: 下面系列函数用于创建一个JSON对象: 给JSON对象增加字段(不会增加引用计数): 删除json对象的指定字段,被删除的对象引用计数减去1,如果这个val没有更多的所有者,这个key对应的val被free,否则这个val的引用保存在内存中: 增加一个元素到json数组的末尾,obj引用计数不会增加,增加字段的方式更加紧凑;如果需要获取val的引用,需要用json_object_get()来传递该对象: 替换json数组中的值: json数组的排序,这里需要自己写排序函数: 获取json对象的长度,依据字段的数目: 获取json对象的哈希表: 获取对象的数组列表: 获取json的类型: 获取json数组对象的长度: 获取json对象的bool值,int和double对象是0转换为FALSE,否则返回TRUE;非0长度的字符串返回TRUE;其他对象非空的话,返回TRUE: 获取json对象的长度,如果参数不是string类型的json,返回0: 按照索引获取json数组的对象: 转换json对象到c字符串格式: 获取JSON中指定类型的数值: 将字符串转换为json对象: 以下两个函数配合使用,前者获取该对象指针的所有权,引用计数加1,如果对象已经被释放,返回NULL;后者引用计数减1,如果对象已经被释放,返回1: 类型判断: json_util.h提供了有关文件读写操作的函数,这个文件的内容是json格式的:

有没有免费云存储JSON,并能随时编辑和调用该JSON的网站?

一般来说没有云存储JSON,有也是要收费的。不会是免费,因为服务器的维护和存储空间不可能免费给你用。

pandas常用函数汇总

pandas官方文档: 对常用函数做了汇总,每个函数的参数可能不是全的,但是常用的,不常用的没总结,如有问题,请不吝赐教,谢谢!

1、创建Series

  • 通用函数:pd.Series(values,index)
    1. pd.Series([1,2,3],index=['a','b','c'])
    2. pd.Series(np.array([1,2,3]),index=['a','b','c'])
    3. pd.Series({ 'a':1, 'b':2, 'c':3})
  • Series转字典:Series.to_dict()
  • 说明:Series的values参数是python中常见的一维数据类型。

2、属性

1)Series.values ---array([1,2,3])

  • Series的values是array类型 2)Series.index---index(['a','b','c'])
  • 未指定index时,自动生成 0-(N-1)的整数索引,
  • 指定 index时,使用指定索引。

3、Series的索引与切片

  • Series[0] / Series['a'] : Sereis可以位置索引或标签索引,也可以进行切片操作

1、创建DataFrame

  1. 创建DataFrame的通用函数:
df = pd.DataFrame(values,index,columns)
pd.dataFrame([[1,2,3],[4,5,6],[7,8,9]],index=['a','b','c'],columns=['bj','sh','sz'])
pd.dataFrame(np.arange(1,10).reshape(3,3),index=['a','b','c'],columns=['bj','sh','sz'])
pd.dataFrame('bj':[1,4,7],'sh':[2,5,8],'sz':[3,6,9],index=['a','b','c'])

说明:创建方法与Sries类似,Series的values参数是python中常见的一维数据类型,DataFrame的values参数是python中常见的二维数据类型。 2) 通过网页中复制数据快捷创建

import webbrowser
link = ''
webbrowser.open(link)

打开界面进行复制,将数据复制到粘贴板中

df = pd.read_clipboard() #从粘贴板中读取数据

3)通过Series创建DataFrame

df = pd.DataFrame([s1,s2,s3],columns=['bj','sh','sz'])

注意:单独的s1,s2,s3是纵向排列的的Series,但是在DataFrame中是横向排列的。 自己总结:Series除了打印出来是Series格式外,其他时候可以直接当作list来操作。

2、属性

  1. df.columns
  • 通过columns生成新的DataFrame
df_new = pd.DataFrame(df,columns=['x1','x2'])

或者

df_new = df[['x1','x2']]
  1. df.shape 显示行列数
  2. df.head() 默认显示前5行
  3. df.tail() 默认显示后5行

3、获取DataFrame的列

1)获取DataFrame某一列

  • df.x1或df['x1']:返回值是Series,可以理解为一个DataFrame是由多个Series组成的。
  1. 获取DataFrame某几列
  • df_new = df[['x1','x2','x3']]

4、为某列赋值

  1. df['x1'] = range(10)
  2. df['x1'] = numpy.arange(10)
  3. df['x1'] = pd.Series(np.arange(10)) 说明:类似于创建Series

5、为某列对应的特定行重新赋值

df['x1'] = pd.Series([2,3],index=[0,1])

将列为x1,行索引为0和1的值改为2,3

6、获取DadaFrame的行

for row in DataFrame.iterrows():
    print(row[0],row[1])

每个row是一个元祖,包含2个元素,row[0]是整型索引,row[1]是Series,所以从行的角度也可以看出,一个DataFrame是由多个Series组成的。

7、DataFrame的转置

df_new = df.T

1、粘贴板的io

df = pd.read_clipboard()
df.to_clipboard()

2、csv的io

df.to_csv('xxx.csv')
df = pd.read_csv('xxx.csv')

3、json的io

df.to_json()
pd.read_json(df.to_json())

4、excel的io

df.to_excel('xx.xlsx')
df = pd.read_excel('xx.xlsx')

5、df = pd.read_sql('')

df.to_sql('')

1、iloc

sub_df = df.iloc[10:20,:] # 选取DataFrame的10-20行,所有列数据
sub_df = df.iloc[10:20,0:2]

说明:iloc函数是位置索引,与索引的名字无关。

2、loc

sub_df = df.loc[10:20,:'movie_name']

说明:loc是标签索引,10,20,'movie_name' 都是索引名字,与位置无关。

1、Series.reindex(index=['x1','x2','x3'],fill_value=10)

将df重新索引,并且将NaN空值用10进行填充

2、Series.reindex(index=range(15),method='ffill')

前项填充,后面的值用前面的值进行填充 通过reindex想到,如果想新增一个空列或者空行,可以用reindex方法,同样地,想减少某些行或者某些列,也可以用reindex方法。 继reindex之后删除行列的函数操作

  • Series.drop('A') #删除'A'所对应的值
  • DataFrame.drop(label,axis) label可以是行名也可以是列名,label是行的话axis是0,label是列的话axis是1。 ** 删除行还可以用 del df['A'] nan是numpy的一种数据类型,np.nan,float类型 任何数据与nan的运算结果都是nan

1、nan in Series

  • Series.isnull() --返回value为True或者False的Series
  • Series.notnull() --返回value为True或者False的Series
  • Series.dropna() --返回删除nan值后的Series
  • Series.fillna(method='ffill') --前项插值,按照前面的值填充后面的空值

2、nan in DataFrame

  • df.isnull() --返回value为True或者False的DataFrame
  • df.notnull() --返回value为True或者False的DataFrame
  • df.dropna(axis=0/1,how='any/all',thresh=None) 说明:axis表示删除行为nan或者列为nan; any表示只要有一个为空,all表示行中的每个元素或者列中的每个元素为空; thresh是阈值的意思,表示某行或者某列nan的个数达到阈值的个数时才删除该行或该列。
  • df.fillna(value=1) ---所有的空值都填充为1
  • df.fillna(value={0:0,1:1,2:2}) ---将0列的空值填为0,1列的空值填为1,2列的空值填为2,默认为填充列 注意:fillna和dropna的特点,生成新的DataFrame,原来的DataFrame不变。

1、多重索引介绍

Series = pd.Series(np.random.randn(6),index=[['1','1','1','2','2','2'],['a','b','c','a','b','c']])

'1','2'为一级索引,'a','b','c'为二级索引 df 可以看做是索引的'1','2'的Series

  • Series['1'] --Series
  • Series['1']['a'] --value
  • Series[:,'a'] --选择'1'和'2'中的'a'对应的值

2、多重索引格式转为二维DataFrame

df = Series.unstack() --转为二维DataFrame

3、多重索引在DataFrame中的操作

1、 map函数与apply函数、applymap函数的区别:

1)map函数对Series中的每个元素作用; 2)applymap函数对DataFrame中的每个元素作用; 3)apply函数对对DataFrame和Series的一列做整体运算。

2、Series.replace(to_replace=[2,3,4],values=[20,30,40]) 替换Series中多个值

  • Series.replace({1:10,2:20}) 将索引为1的值替换为10,将索引为2的值替换为20
  • df.sum() --默认按照列进行求和,nan的值被忽略
  • df.min() --默认按照列求最小值
  • df.max() --默认按照列求最大值
  • df.mean() --默认按照列求平均值
  • df.describe() --默认按照列进行描述
  • df.sum(axis=1) --按行求和,nan的值被忽略 #axis=0表示对横轴进行操作,但是运算中表现为纵轴操作 #axis=1表示对纵轴进行操作,但是运算中表现为横轴操作
bins = [0,59,70,80,100],bins是分割范围
score_cat = pd.cut(Series,bins) ---得到catgory类型的数据
DataFrame的分箱技术很棒啊!
pd['catgory'] = pd.cut(df['a'],bins=[0,59,70,80,100],labels=['low','ok','good','great']) --新增一列,将a列的值按照labels进行分类标记,good!!!
#生成长度为3的随机字符串 pd.util.testing.rands(3)

1、按照一列分组

g = df.groupby('city')

g是分组类型数据,打印不出来,所以看不到,但是有属性和方法可以间接的了解 1) g.groups --得到分的几个组,和每个组包含的索引 2)g.get_group('BJ') --得到'BJ'所对应的组 3)groupby = split +apply +combine

  • g.mean() --求每组的平均值
  • g.max() --求每组的最大值
  • g.min() --求每组的最小值
  • g.count()
  • g.describe() 4)g是一个可迭代对象,可以用list函数将其转化为list
  • list(g) -- [('组名1',DataFrame1),('组名2',DataFrame2),(),()]
  • dict(list(g)) --将其转化为字典 同时可以通过for循环进行遍历操作:for item,desc in g:print(item,desc) #怪不得分组后不是DataFrame,因为元组的第一个元素是'分组名'。

2、按照多列分组

g_new = df.groupby(['city','wind'])

得到生成器((('分组1','分组2'),DataFrame),(),()...)

g_new.get_group(('分组1','分组2'))
for (name_1,name_2),group in g_new:
    print((name_1,name_2),group)

g.mean() --求每组的平均值

与g.agg('mean')方法一样

pd.pivot_table(df,index=['',''],aggfuc='sum',values=['',''])

index是分组的组名,values是透视表呈现结果的列,columns是values下的分解 #感觉透视表呈现的结果就是groupby+agg后的结果 #分析者需要对数据结构有一定的了解

df.sort_values(by='',ascending=True/False)[:10] df可以索引
df.value_counts() --按值计数
df.['a'] = df['b'].apply(lambda x:x0) --DataFrame中的True/False

通过g.size()可以看到被groupby之后的数据,得到的是一个Series

1、Series的排序:

1)对值进行排序

  • Series.sort_values() ---直接对Series的值进行排序 2)通过索引进行排序
  • Series.sort_index() #默认都是升序排列

2、DataFrame的排序

  • df.sort_values(by='') --按照某列的顺序进行排序
  • df['a'].sort_values() --返回对a列数据的排序结果,只返回a列

1、df.index = Series(['a','b','c']) 直接对index赋予新值

2、df.index = df.index.map(str.upper)

map函数中只传入新的函数名即可

3、df.rename(index=str.upper,columns=str.lower)

或者传递字典,进行一一转换

pd.merge(df1,df2,on=None,how='left/right/inner/outer')
pd.merge(df1,df2) --没有on参数默认先找相同的columns,然后在columns下找相同的values
pd.merge(df1,df2,on='columns') --on参数是指按照指定列进行merge

left:表示以左边的数据表为基准,进行填充右面的数据 right:表示以右边的数据表为基准,填充左边的数据 outer:以on的指定列的所有值为基准,填充两边的数据 inner:默认inner,相同on指定的columns下的相同values对应的左右两边的数据

1、concat拼接

pd.concat([Series1,Series2])
pd.concat([df1,df2]) -- 上下叠加,将没有的列进行填充

2、combine组合

  • Series1.combine_first(Series2) --用Series2的值去填充Series1中为空的值
  • df1.combine_first(df2) ---用df2将df1中的空值填充
df['A'] = df['A'].apply(str.upper) ---apply函数中也只输入函数名
len(df) --求df的长度
len(df['a'].unique()) --查看a列中不重复数据的多少
Series.duplicated() --返回一列True/False的Series
Series.drop_duplicates() --删除重复值
df.drop_duplicates('a',keep='first/last')
df.drop_duplicates() --删除完全重复的行

参数:'a'表示以a列为基准,删除重复值 first表示保留第一个,last表示保留最后一个

data_list = pd.date_range(start,end,period='D',freq)
period='D',以天为单位
freq = 'W' 以周为单位
freq = 'W-Mon'以每周一位单位
freq = '5H' 以5h为单位
以data_range作为索引提取数据比较简单
df[datetime(2017,9,1)]
df['2017-09-01']
df['20170901']
df['201709']
对时间序列数据进行分组聚合操作:
s1.resample('M').mean() --以月为单位进行采样,然后求每组的平均值
s1.resample('H').ffill() --前项填充
s1.resample('H').bfill() --后项填充

补充: 1)jupyter中可以执行linux命令,太棒了!

!ls
!more xxx.csv
!pwd

2)jupyter 查看函数帮助的快捷键:摁住shift + tab 棒!!!