Questions tagged «pandas»

Pandas是用于数据处理和分析的Python库,例如,在统计,实验科学结果,计量经济学或金融学中常见的数据框,多维时间序列和横截面数据集。Pandas是Python中主要的数据科学库之一。

6
在numpy中快速找到对称对
from itertools import product import pandas as pd df = pd.DataFrame.from_records(product(range(10), range(10))) df = df.sample(90) df.columns = "c1 c2".split() df = df.sort_values(df.columns.tolist()).reset_index(drop=True) # c1 c2 # 0 0 0 # 1 0 1 # 2 0 2 # 3 0 3 # 4 0 4 # .. .. .. # …
15 python  pandas  numpy 

3
使用熊猫中的两个地理数据框获取最近的距离
这是我的第一个geodatframe: !pip install geopandas import pandas as pd import geopandas city1 = [{'City':"Buenos Aires","Country":"Argentina","Latitude":-34.58,"Longitude":-58.66}, {'City':"Brasilia","Country":"Brazil","Latitude":-15.78 ,"Longitude":-70.66}, {'City':"Santiago","Country":"Chile ","Latitude":-33.45 ,"Longitude":-70.66 }] city2 = [{'City':"Bogota","Country":"Colombia ","Latitude":4.60 ,"Longitude":-74.08}, {'City':"Caracas","Country":"Venezuela","Latitude":10.48 ,"Longitude":-66.86}] city1df = pd.DataFrame(city1) city2df = pd.DataFrame(city2) gcity1df = geopandas.GeoDataFrame( city1df, geometry=geopandas.points_from_xy(city1df.Longitude, city1df.Latitude)) gcity2df = geopandas.GeoDataFrame( city2df, geometry=geopandas.points_from_xy(city2df.Longitude, city2df.Latitude)) 城市1 City Country Latitude Longitude …

4
计算熊猫数据框中相似值的百分比
我有一个数据框df,有两列:脚本(带文本)和扬声器 Script Speaker aze Speaker 1 art Speaker 2 ghb Speaker 3 jka Speaker 1 tyc Speaker 1 avv Speaker 2 bhj Speaker 1 我有以下列表: L = ['a','b','c'] 使用以下代码, df = (df.set_index('Speaker')['Script'].str.findall('|'.join(L)) .str.join('|') .str.get_dummies() .sum(level=0)) print (df) 我得到这个数据框df2: Speaker a b c Speaker 1 2 1 1 Speaker 2 2 …

2
推断哪些列是日期时间
我有一个巨大的数据框,其中包含许多列,其中许多列都是type的datetime.datetime。问题在于,许多还具有混合类型,包括例如datetime.datetime值和None值(以及可能的其他无效值): 0 2017-07-06 00:00:00 1 2018-02-27 21:30:05 2 2017-04-12 00:00:00 3 2017-05-21 22:05:00 4 2018-01-22 00:00:00 ... 352867 2019-10-04 00:00:00 352868 None 352869 some_string Name: colx, Length: 352872, dtype: object 因此导致object类型列。可以用解决df.colx.fillna(pd.NaT)。问题在于数据框太大,无法搜索单个列。 另一种方法是使用pd.to_datetime(col, errors='coerce'),但是这将强制转换为datetime包含数值的许多列。 我也可以做df.fillna(float('nan'), inplace=True),尽管包含日期的列仍然是object类型,并且仍然会有相同的问题。 我可以采用什么方法将那些其值确实包含datetime值但也可能包含None,以及可能包含一些无效值的列转换为日期时间(提及,因为否则pd.to_datetime在try/ except子句中可以执行)?像是弹性版本pd.to_datetime(col)
14 python  pandas 

3
为什么用[:]与iloc [:]分配在熊猫中会产生不同的结果?
我对iloc在熊猫中使用不同的索引方法感到困惑。 假设我正在尝试将1维数据帧转换为2维数据帧。首先,我有以下一维数据框 a_array = [1,2,3,4,5,6,7,8] a_df = pd.DataFrame(a_array).T 我将其转换为大小为的二维数据帧2x4。我首先将二维数据帧预设如下: b_df = pd.DataFrame(columns=range(4),index=range(2)) 然后我使用for循环通过以下代码帮助我将a_df(1-d)转换为b_df(2-d) for i in range(2): b_df.iloc[i,:] = a_df.iloc[0,i*4:(i+1)*4] 它只给我以下结果 0 1 2 3 0 1 2 3 4 1 NaN NaN NaN NaN 但是当我改变b_df.iloc[i,:]为b_df.iloc[i][:]。结果是正确的,如下所示,这是我想要的 0 1 2 3 0 1 2 3 4 1 5 6 7 8 …

1
熊猫的to_excel函数生成意外的TypeError
我创建了一个熊猫数据框字典: d[k] = pd.DataFrame(data=data[i]) 因此,我认为这d[k]是一个正确的熊猫数据框。 然后 for k in d.keys(): d[k].to_excel (file_name) 然后我有错误: TypeError: got invalid input value of type <class 'xml.etree.ElementTree.Element'>, expected string or Element 我正在使用Python 3.7,pandas 0.25.3。 更新:如果我替换to_excel为to_csv,则代码可以完美运行。

3
慢熊猫DataFrame MultiIndex重新索引
我有一个形式的熊猫DataFrame: id start_time sequence_no value 0 71 2018-10-17 20:12:43+00:00 114428 3 1 71 2018-10-17 20:12:43+00:00 114429 3 2 71 2018-10-17 20:12:43+00:00 114431 79 3 71 2019-11-06 00:51:14+00:00 216009 100 4 71 2019-11-06 00:51:14+00:00 216011 150 5 71 2019-11-06 00:51:14+00:00 216013 180 6 92 2019-12-01 00:51:14+00:00 114430 19 7 92 2019-12-01 …

2
生成过滤后的二元笛卡尔积
问题陈述 我正在寻找一种有效的方法来生成完全二进制的笛卡尔乘积(具有某些列的True和False的所有组合的表),并按某些排他条件过滤。例如,对于三列/位,n=3我们将获得完整表 df_combs = pd.DataFrame(itertools.product(*([[True, False]] * n))) 0 1 2 0 True True True 1 True True False 2 True False True 3 True False False ... 应该由字典定义互斥组合来过滤此内容,如下所示: mutually_excl = [{0: False, 1: False, 2: True}, {0: True, 2: True}] 键在其中表示上表中的列。该示例将读取为: 如果0为False而1为False,则2不能为True 如果0为True,则2不能为True 基于这些过滤器,预期输出为: 0 1 2 1 True …

1
熊猫UDF和pyarrow 0.15.0
最近,我开始pyspark在EMR群集上运行的许多作业中遇到一堆错误。错误是 java.lang.IllegalArgumentException at java.nio.ByteBuffer.allocate(ByteBuffer.java:334) at org.apache.arrow.vector.ipc.message.MessageSerializer.readMessage(MessageSerializer.java:543) at org.apache.arrow.vector.ipc.message.MessageChannelReader.readNext(MessageChannelReader.java:58) at org.apache.arrow.vector.ipc.ArrowStreamReader.readSchema(ArrowStreamReader.java:132) at org.apache.arrow.vector.ipc.ArrowReader.initialize(ArrowReader.java:181) at org.apache.arrow.vector.ipc.ArrowReader.ensureInitialized(ArrowReader.java:172) at org.apache.arrow.vector.ipc.ArrowReader.getVectorSchemaRoot(ArrowReader.java:65) at org.apache.spark.sql.execution.python.ArrowPythonRunner$$anon$1.read(ArrowPythonRunner.scala:162) at org.apache.spark.sql.execution.python.ArrowPythonRunner$$anon$1.read(ArrowPythonRunner.scala:122) at org.apache.spark.api.python.BasePythonRunner$ReaderIterator.hasNext(PythonRunner.scala:406) at org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:37) at org.apache.spark.sql.execution.python.ArrowEvalPythonExec$$anon$2.<init>(ArrowEvalPythonExec.scala:98) at org.apache.spark.sql.execution.python.ArrowEvalPythonExec.evaluate(ArrowEvalPythonExec.scala:96) at org.apache.spark.sql.execution.python.EvalPythonExec$$anonfun$doExecute$1.apply(EvalPythonExec.scala:127)... 它们似乎都发生在apply熊猫系列的功能中。我发现的唯一更改是pyarrow在星期六(05/10/2019)更新的。测试似乎适用于0.14.1 因此,我的问题是,是否有人知道这是新更新的pyarrow中的错误,还是有一些重大更改会导致pandasUDF将来难以使用?

5
将列表中找到的ID添加到Pandas数据框中的新列
假设我有以下数据框(一列整数和一列整数列表)... ID Found_IDs 0 12345 [15443, 15533, 3433] 1 15533 [2234, 16608, 12002, 7654] 2 6789 [43322, 876544, 36789] 还有一个单独的ID列表... bad_ids = [15533, 876544, 36789, 11111] 鉴于此,忽略df['ID']列和任何索引,我想看看bad_ids列中是否提到了列表中的任何ID df['Found_IDs']。到目前为止,我的代码是: df['bad_id'] = [c in l for c, l in zip(bad_ids, df['Found_IDs'])] 这是有效的,但仅当bad_ids列表比数据框长,并且对于实际数据集,bad_ids列表将比数据框短得多时。如果我将bad_ids列表设置为仅两个元素... bad_ids = [15533, 876544] 我遇到了一个非常流行的错误(我读过很多有相同错误的问题)... ValueError: Length of values does …

9
从一列熊猫创建一个NxN矩阵
我有数据框,每一行都有一个列表值。 id list_of_value 0 ['a','b','c'] 1 ['d','b','c'] 2 ['a','b','c'] 3 ['a','b','c'] 我必须用一行计算所有其他行的分数 例如: Step 1: Take value of id 0: ['a','b','c'], Step 2: find the intersection between id 0 and id 1 , resultant = ['b','c'] Step 3: Score Calculation => resultant.size / id.size 对所有ID重复在ID 0和ID 1,2,3之间重复步骤2,3。 并创建一个N x N数据帧;例如: …
11 python  pandas  numpy 

1
如何从Python生成的动态循环中删除空值?
我有一个这样的数据框: ORDER_NO 2401 2504 2600 2020020 2019-12-04 2019-12-10 2019-12-12 2020024 2019-12-25 NaN 2019-12-20 2020034 NaN NaN 2019-12-20 2020020 2019-12-12 2019-12-15 2019-12-18 我从上面的数据框架创建XML。我想删除填充到XML中的空值。我的代码应从XML中删除该特定的列和行值。 我的密码 header = """<ORD>{}</ORD>""" body =""" <osi:ORDSTSINF types:STSCDE="{}"> <DTM>{}</DTM>""" cols = df.columns for row in df.itertuples(): with open(f'{row[1]}.xml', 'w') as f: f.write(header.format(row[1])) for c, r in zip(row[2:], cols[1:]): …

3
熊猫根据一列中的值条件一次覆盖多列中的值
我有这样的DataFrame: df = pd.DataFrame(data={ 'col0': [11, 22,1, 5] 'col1': ['aa:a:aaa', 'a:a', 'a', 'a:aa:a:aaa'], 'col2': ["foo", "foo", "foobar", "bar"], 'col3': [True, False, True, False], 'col4': ['elo', 'foo', 'bar', 'dupa']}) 我想在col1中的“:”上分割后得到列表的长度,然后如果长度> 2则覆盖值,或者如果长度<= 2则不覆盖值。 理想情况下,尽可能快地排成一行。 目前,我尝试但它返回ValueError。 df[['col1', 'col2', 'col3']] = df.loc[df['col1'].str.split(":").apply(len) > 2], ("", "", False), df[['col1', 'col2', 'col3']]) 编辑:col1条件。EDIT2:感谢您提供的所有出色的快速答复。惊人!EDIT3:在10 ^ 6行上计时: @ansev …
11 python  pandas  apply 

2
如何使用正则表达式拆分列,以将尾随的CAPS移动到单独的列中?
我正在尝试使用正则表达式拆分一列,但似乎无法正确获取拆分。我正在尝试采用所有尾随的CAPS,并将其移至单独的列中。因此,我将获得连续2-4个CAPS的所有CAPS。但是,它只是'Name'在'Team'列为空白时才离开该列。 这是我的代码: import pandas as pd url = "https://www.espn.com/nba/stats/player/_/table/offensive/sort/avgAssists/dir/desc" df = pd.read_html(url)[0].join(pd.read_html(url)[1]) df[['Name','Team']] = df['Name'].str.split('[A-Z]{2,4}', expand=True) 我要这个: print(df.head(5).to_string()) RK Name POS GP MIN PTS FGM FGA FG% 3PM 3PA 3P% FTM FTA FT% REB AST STL BLK TO DD2 TD3 PER 0 1 LeBron JamesLA SF 35 35.1 24.9 9.6 …
11 python  regex  pandas 

7
将重复的“键=值”对的文件读入DataFrame
我有一个txt文件,其中包含此格式的数据。前三行重复一遍又一遍。 name=1 grade=A class=B name=2 grade=D class=A 我想以表格格式输出数据,例如: name | grade | class 1 | A | B 2 | D | A 我正在努力设置标题,并循环遍历数据。到目前为止,我尝试过的是: def myfile(filename): with open(file1) as f: for line in f: yield line.strip().split('=',1) def pprint_df(dframe): print(tabulate(dframe, headers="keys", tablefmt="psql", showindex=False,)) #f = pd.DataFrame(myfile('file1') df = pd.DataFrame(myfile('file1')) pprint_df(df) 该输出是 …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.