天道酬勤,学无止境

pandas

Use word count in Pandas dataframe to drop rows with only one word

问题 我有一个包含 2 条记录的数据框(数据): id text 0001 The farmer plants grain 0002 tuna 我想计算这个数据框的text列中的单词数,并删除只有一个单词的行。 我知道如何计算字数: count = data['text'].str.split().str.len() 如何使用结果来运行将删除数据框中的行的 IF 语句? 任何 IF 语句,例如... if count == 1: print('drop') ...导致此错误: Traceback (most recent call last): File "<ipython-input-118-b3fcb0218e8e>", line 32, in <module> if count == 1: File "C:\Users\taca\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\generic.py", line 917, in __nonzero__ .format(self.__class__.__name__)) ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a

2022-07-11 10:00:39    分类:技术分享    python   pandas   dataframe

How to replace the white space in a string in a pandas dataframe?

问题 假设我有一个这样的熊猫数据框: Person_1 Person_2 Person_3 0 John Smith Jane Smith Mark Smith 1 Harry Jones Mary Jones Susan Jones 可复制形式: df = pd.DataFrame([['John Smith', 'Jane Smith', 'Mark Smith'], ['Harry Jones', 'Mary Jones', 'Susan Jones'], columns=['Person_1', 'Person_2', 'Person_3']) 用下划线 _ 替换每个名称中名字和姓氏之间的空格的最佳方法是什么: Person_1 Person_2 Person_3 0 John_Smith Jane_Smith Mark_Smith 1 Harry_Jones Mary_Jones Susan_Jones 先感谢您! 回答1 我认为您也可以选择 DataFrame.replace。 df.replace(' ', '_', regex=True) 输出 Person_1 Person_2 Person_3 0 John_Smith Jane_Smith Mark_Smith 1 Harry_Jones Mary_Jones Susan_Jones 从一些粗略的基准测试来看

2022-07-11 09:57:49    分类:技术分享    python   pandas

Add columns in pandas dataframe dynamically

问题 我有以下代码来加载数据框 import pandas as pd ufo = pd.read_csv('csv_path') print(ufo.loc[[0,1,2] , :]) 给出以下输出,请参阅 csv 的结构 City Colors Reported Shape Reported State Time 0 Ithaca NaN TRIANGLE NY 6/1/1930 22:00 1 Willingboro NaN OTHER NJ 6/30/1930 20:00 2 Holyoke NaN OVAL CO 2/15/1931 14:00 现在,我想在现有列的基础上添加一个额外的列。 我有一个列表,其中包含参与列的索引。 它可以是0,1或0,2,3或1,2,3任何值。 我需要动态创建它。 我可以想出以下 df1['combined'] = df1['City']+','+df1['State'] 放置索引似乎不起作用。 我想加入那些专栏。 使用','.join() 回答1 df[[0,2,3]].apply(','.join, axis=1) #0 Ithaca,TRIANGLE,NY #1 Willingboro,OTHER,NJ #2 Holyoke,OVAL,CO #dtype: object 回答2 如果索引列表是l ,您可以使用 pd.Series.cat

2022-07-11 09:53:12    分类:技术分享    python   pandas   dataframe

Sampling a dataframe based on a given distribution

问题 如何根据给定的类\标签分布值对 pandas 数据框或 graphlab sframe 进行采样,例如:我想对具有标签\类列的数据框进行采样以选择行,以便平等地获取每个类标签,从而具有相似的频率为每个类标签对应一个均匀分布的类标签。 或者最好是根据我们想要的类分布来获取样本。 +------+-------+-------+ | col1 | clol2 | class | +------+-------+-------+ | 4 | 45 | A | +------+-------+-------+ | 5 | 66 | B | +------+-------+-------+ | 5 | 6 | C | +------+-------+-------+ | 4 | 6 | C | +------+-------+-------+ | 321 | 1 | A | +------+-------+-------+ | 32 | 432 | B | +------+-------+-------+ | 5 | 3 | B | +------+-------+-------+ given a huge dataframe like above and the required frequency distribution like below: +-------+--------

2022-07-11 09:46:01    分类:技术分享    python   pandas   graphlab   sframe

How to set a value in a pandas DataFrame by mixed iloc and loc

问题 假设我想要一个函数来更改 DataFrame 的给定行号中命名列的值。 一种选择是查找列的位置并使用 iloc,如下所示: def ChangeValue(df, rowNumber, fieldName, newValue): columnNumber = df.columns.get_loc(fieldName) df.iloc[rowNumber, columnNumber] = newValue 但是我想知道是否有一种方法可以一次性使用 iloc 和 loc 的魔力,并且跳过手动转换。 有任何想法吗? 回答1 我建议将iloc与Index.get_loc方法结合使用。 例如: df.iloc[0:10, df.columns.get_loc('column_name')] 有点笨拙,但足够简单。 MultiIndex同时具有get_loc和get_locs ,它们采用序列; 不幸的是, Index似乎只有前者。 回答2 根据这个答案, ix通常尝试表现得像loc ,但如果标签不在索引中,则回退到表现得像iloc 。 因此,您应该特别能够在type(df.index) != type(rowNumber)的情况下使用df.ix[rowNumber, fieldname] 。 回答3 df.head(1)['column_name'] # first entry in

2022-07-11 09:45:41    分类:技术分享    python   pandas

Unable to read csv file by Anaconda IDE

问题 我的 Anaconda IDE 无法使用panda.read_csv()函数读取 csv 文件。 文件名是棒球,保存在位置C:\Users\Firdaus\Desktop 我写了以下代码: # Import pandas as pd import pandas as pd # Import the cars.csv data as Base Base = pd.read_csv('C:\Users\Firdaus\Desktop\baseball.csv') # Print out Base print(Base) 错误是: SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape 回答1 在常规 python 字符串中,\U 字符组合表示扩展的 Unicode 代码点转义。 您可以使用以下方法之一: r'C:\Users\Firdaus\Desktop\baseball.csv' #r stands for raw strings 'C:\\Users\\Firdaus\\Desktop\\baseball.csv' #using double slashes 'C:/Users/Firdaus

2022-05-17 05:23:03    分类:技术分享    python   csv   pandas

Ignoring NaN in a dataframe

问题 回答1 import pandas as pd import numpy as np df = pd.DataFrame({'col1': np.random.randint(0, 10, 12)}) df.loc[2] = np.nan df.loc[5] = np.nan df['col1'].unique() ### output: array([ 4., 0., nan, 8., 1., 3., 2., 6.]) df['col1'].dropna().unique() ### output: array([ 4., 0., 8., 1., 3., 2., 6.])

2022-05-17 05:21:22    分类:技术分享    python   pandas   numpy   dataframe

replace values by the mean

问题 我有一个数据框如下: Col1 Price 1 Plastic 50 2 Metal 100 3 Plastic 40 我想用价格中的方法替换 Col1 中的值,所以我得到: Col1 Price 1 45 50 2 100 100 3 45 40 我已经做过: df.groupby('Col1').mean()['Price'] 但我不知道如何替换值,也许使用 map ? 回答1 df['Col1'] = df['Col1'].map(df.groupby('Col1')['Price'].mean()) df Col1 Price 1 45 50 2 100 100 3 45 40 回答2 df.assign(Col1=df.Col1.map(df.groupby('Col1').mean().squeeze())) Col1 Price 1 45 50 2 100 100 3 45 40 回答3 df['Col1']=df.groupby(['Col1'])['Price'].transform('mean') Col1 Price 0 45 50 1 100 100 2 45 40

2022-05-17 05:07:13    分类:技术分享    python   pandas   numpy   dataframe   pandas-groupby

Convert decimal to Roman numerals

问题 d_hsp={"1":"I","2":"II","3":"III","4":"IV","5":"V","6":"VI","7":"VII","8":"VIII", "9":"IX","10":"X","11":"XI","12":"XII","13":"XIII","14":"XIV","15":"XV", "16":"XVI","17":"XVII","18":"XVIII","19":"XIX","20":"XX","21":"XXI", "22":"XXII","23":"XXIII","24":"XXIV","25":"XXV"} HSP_OLD['tryl'] = HSP_OLD['tryl'].replace(d_hsp, regex=True) HSP_OLD是一个数据框, tryl是tryl的一列,下面是HSP_OLD中的一些值示例: SAF/HSP: Secondary diagnosis E code 1 SAF/HSP: Secondary diagnosis E code 11 我用字典代替,它适用于1-10,但对于11,它将变成“II”,对于12,它将变成“III”。 回答1 抱歉,没有注意到您不仅在更新字段,而且实际上想在最后替换一个数字,但即使是这种情况 - 将您的数字正确转换为罗马数字比映射所有可能的数字要好得多发生这种情况(如果数字大于 25

2022-05-17 03:57:08    分类:技术分享    python   regex   pandas   dictionary   replace

Memory-efficient filtering of `DataFrame` rows

问题 我有一个大型DataFrame对象(1,440,000,000 行)。 我在内存(交换包含)限制下运行。 我需要提取具有特定字段值的行的子集。 但是,如果我这样做: >>> SUBSET = DATA[DATA.field == value] 我以MemoryError异常或崩溃结束。 有没有办法明确过滤行 - 不计算中间掩码( DATA.field == value )? 我找到了 DataFrame.filter() 和 DataFrame.select() 方法,但它们对列标签/行索引而不是行数据进行操作。 回答1 df = df.query("field == value") 回答2 如果通过任何更改,DataFrame 中的所有数据都属于相同类型,请改用 numpy 数组,它的内存效率更高,速度更快。 您可以通过 df.as_matrix() 将数据框转换为 numpy 矩阵。 此外,您可能想检查数据帧已经占用了多少内存: import sys sys.getsizeof() 返回以字节为单位的大小。

2022-05-17 03:38:03    分类:技术分享    python   python-2.7   python-3.x   pandas