cjsonio下載(cjsonh)

本文目錄一覽:

C#怎麼解析Json並提取所有內容到字典或List,要具體代碼。

//需要引用附件dll

TextReader reader = File.OpenText(“json.txt”);

JsonReader readerJson = new JsonTextReader(reader);

Dictionaryobject, object dict = new Dictionaryobject, 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’]]

    2)df.shape  顯示行列數

    3)df.head()   默認顯示前5行

    4)df.tail()     默認顯示後5行

3、獲取DataFrame的列

     1)獲取DataFrame某一列

          df.x1或df[‘x1’]:返回值是Series,可以理解為一個DataFrame是由多個Series組成的。

      2) 獲取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  棒!!!

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/195718.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-02 20:36
下一篇 2024-12-02 20:36

發表回復

登錄後才能評論