Pandas
2024/3/12 DataFrame.dropna()
https://leetcode.cn/problems/drop-missing-data/?envType=study-plan-v2&envId=introduction-to-pandas&lang=pythondata
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
dropna 函数参数定义:
- axis:它可以是 {0 or ‘index’, 1 or ‘columns’}。默认为 0。如果 axis=0,则丢弃包含缺失值的行;如果 axis=1,则丢弃包含缺失值的列。
- how: 确定当我们至少有一个 NA 或全部 NA 时,是否从 DataFrame 中删除行或列。 how=‘any’: 如果存在任何 NA 值,则删除该行或列(默认)。how=‘all’:如果所有值都为 NA,则删除该行或列。
- thresh: 需要多少非 NA 值。这是一个整型参数,需要最小数量的非 NA 值才能保留行/列。
- subset:要考虑的另一个轴上的标签,例如,如果您正在删除行,则这些标签将是要包括的列的列表。当您只想考虑某些列中的 NA 值时,这特别有用。
- inplace: 这是一个布尔值,如果是 True,则对 DataFrame 本身进行更改。请记住,在使用 inplace=True 参数时,您修改的是原始的 DataFrame。如果出于任何原因需要保留原始数据,请避免使用 inplace=True,而是将结果赋给新的 DataFrame。
2024/3/13
https://leetcode.cn/problems/modify-columns/?envType=study-plan-v2&envId=introduction-to-pandas&lang=pythondata
def modifySalaryColumn(employees: pd.DataFrame) -> pd.DataFrame:
# employees.salary=employees.salary *2
employees.salary=employees['salary'] *2
return employees
2024//14 DataFrame.rename()
2024//14
https://leetcode.cn/problems/rename-columns/?envType=study-plan-v2&envId=introduction-to-pandas&lang=pythondata
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rename.html#pandas.DataFrame.rename
DataFrame.rename(mapper=None, index=None, columns=None, axis=None, copy=None, inplace=False, level=None, errors='ignore')
参数定义:
mapper: dict-like or function
Dict-like or function transformations to apply to that axis’ values. Use either mapper and axis to specify the axis to target with mapper, or index and columns.
# mapper, index, columns:可以传递以重命名索引或列的词典。在我们的示例中,我们使用 columns。
axis: 可以是 "index" 或 "columns"。确定是重命名索引还是重命名列。默认情况下,如果您提供 columns 参数,您将重命名列。
copy: 如果设置为 True,则创建一个新的 DataFrame。如果为 False,则修改原始 DataFrame。
inplace: 如果设置为 True,则重命名会原地修改 DataFrame,不会返回任何内容。如果为 False,则在不修改原有 DataFrame 的情况下,返回一个新的带有更名列的 DataFrame。
level: 对于具有多级索引的 DataFrame,应当重命名标签的级别。
errors: 如果是 'raise',如果尝试重命名不存在的项,则会引发错误。如果设置为 'ignore',任何重命名项目的失败都将被忽略。
import pandas as pd
def renameColumns(students: pd.DataFrame) -> pd.DataFrame:
return students.rename(columns={"id":"student_id","first":"first_name","last":"last_name","age":"age_in_years"})
2024/3/15 DataFrame.astype()
DataFrame.astype(dtype, copy=True, errors='raise')
dtype: 它是一种数据类型,或列名->数据类型的字典。
copy: 默认情况下,astype 总是返回新分配的对象。如果 copy 设置为 False,则只有在旧对象无法强制转换为所需类型的情况下才会创建新对象。
errors: 控制对提供的数据类型的无效数据引发异常。默认设置为 raise,表示会引发异常。
def changeDatatype(students: pd.DataFrame) -> pd.DataFrame:
return students.astype({"grade":int})
2024/3/16
偷懒=没写
2024/3/17 DataFrame.fillna()
https://leetcode.cn/problems/fill-missing-data/?envType=study-plan-v2&envId=introduction-to-pandas&lang=pythondata
DataFrame.fillna(value=None, *, method=None, axis=None, inplace=False, limit=None, downcast=_NoDefault.no_default)[source]
value: 标量,字典,Series 或 DataFrame。用于填充空洞的值(例如 0)。这就是我们在解决方案中使用的。
method: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}。用于填充重新索引 Series 中的空洞的方法。默认为 None。
axis: {0 or ‘index’, 1 or ‘columns’}。沿其填充缺失值的轴。
inplace: 布尔值。如果为True,则原地填充。注意:这将修改此对象上的任何其他视图。默认值为 False。
value :scalar, dict, Series, or DataFrame
- Value to use to fill holes (e.g. 0), alternately a dict/Series/DataFrame of values specifying which value to use for each index (for a Series) or column (for a DataFrame). Values not in the dict/Series/DataFrame will not be filled. This value cannot be a list.
method :{‘backfill’, ‘bfill’, ‘ffill’, None}, default None
- ffill: propagate last valid observation forward to next valid.
- backfill / bfill: use next valid observation to fill gap.Va
value :scalar, dict, Series, or DataFrame
axis:{0 or ‘index’} for Series, {0 or ‘index’, 1 or ‘columns’} for DataFrame
limit:int, default None
downcast:dict, default is None
2024/3/18 DataFrame.concat()
https://leetcode.cn/problems/reshape-data-concatenate/?envType=study-plan-v2&envId=introduction-to-pandas&lang=pythondata
pd.concat():pandas 内部的一个方便的函数,用于垂直(按行)或水平(按列)连接 DataFrame。
objs 参数是一个要串联的 Series 或 DataFrame 对象的序列或映射。
axis 参数决定连接的方向:
axis=0 设置为缺省值,这意味着它将垂直(按行)连接 DataFrame。
axis=1 将水平连接 DataFrame(按列)。
2024/3/19 DataFrame.pivot()
https://leetcode.cn/problems/reshape-data-pivot/?envType=study-plan-v2&envId=introduction-to-pandas&lang=pythondata
pivot 函数中的每个参数执行的操作:
index:它确定新 DataFrame 中的行。在本例中,我们使用原始 DataFrame 中的 month 列作为索引,这意味着我们的透视表将为 month 列中的每个唯一值都建立行。
columns:它确定新 DataFrame 中的列。在这里,我们使用的是 city 列,这意味着我们的透视表将有一列对应于 city 列中的每个唯一值。
values:此参数指定重塑表格时要使用的值。在本例中,我们使用原始 DataFrame 中的 temperature 列。
import pandas as pd
def pivotTable(weather: pd.DataFrame) -> pd.DataFrame:
weather_ = weather.pivot(index='month',columns='city',values='temperature')
return weather_
2024/3/20 DataFrame.melt()
DataFrame.melt()
https://leetcode.cn/problems/reshape-data-melt/?envType=study-plan-v2&envId=introduction-to-pandas&lang=pythondata
关键概念:
melt 函数: pandas 的 melt 函数用于转换或重塑数据。它将 DataFrame 从宽格式(列表示多个变量)更改为长格式(每行表示一个唯一变量)。在我们的例子中,我们希望将销售数据从每个季度有单独的列转换为季度有一列、销售额有一列的格式。
melt 函数参数定义:
id_vars:这指定了应该保持不变的列。对于这个问题,只有 product 列保持不变,因为我们希望输出中的每一行都与一个产品相关联。
value_vars:这指定了我们想要“melt”或将其整形成行的列。在我们的示例中,以下是每个季度的销售数据列:quarter_1、quarter_2、quarter_3 和 quarter_4。
var_name:这是将存储来自 value_vars 的标头名称的新列的名称。在我们的问题中,这些是季度名称。
value_name:这是将存储 value_vars 中的值的新列的名称。在我们的问题中,这将是每个季度每种产品的销售数据。
import pandas as pd
def meltTable(report: pd.DataFrame) -> pd.DataFrame:
data = report.melt(
id_vars='product',
value_vars=['quarter_1','quarter_2','quarter_3','quarter_4'],
var_name='quarter',
value_name='sales'
)
return data
2024/3/21 DataFrame.sort_values()
https://leetcode.cn/problems/method-chaining/
DataFrame.sort_values(by=‘’,ascending=False)
import pandas as pd
def findHeavyAnimals(animals: pd.DataFrame) -> pd.DataFrame:
data = animals[animals.weight>100]
# ascending=False 表示降序。by 表示按照 weight 列的值排序
data = data.sort_values(by='weight',ascending=False)
return data[["name"]]
SQL
2024/3/22
表: Weather
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| id | int |
| recordDate | date |
| temperature | int |
+---------------+---------+
id 是该表具有唯一值的列。
没有具有相同 recordDate 的不同行。
该表包含特定日期的温度信息
编写解决方案,找出与之前(昨天的)日期相比温度更高的所有日期的 id
https://leetcode.cn/problems/rising-temperature/?envType=study-plan-v2&envId=sql-free-50
- DATEDIFF(date1 , date2) ;如果 date1>date2 返回 1 , 相反则返回 -1
或
select b.id
from Weather as a,Weather as b
where a.Temperature < b.Temperature and DATEDIFF(a.recordDate,b.recordDate) = -1;
2024-3-23
忙忘了
2024-3-24
https://leetcode.cn/problems/average-time-of-process-per-machine/?envType=study-plan-v2&envId=sql-free-50
Activity table:
+------------+------------+---------------+-----------+
| machine_id | process_id | activity_type | timestamp |
+------------+------------+---------------+-----------+
| 0 | 0 | start | 0.712 |
| 0 | 0 | end | 1.520 |
| 0 | 1 | start | 3.140 |
| 0 | 1 | end | 4.120 |
| 1 | 0 | start | 0.550 |
| 1 | 0 | end | 1.550 |
| 1 | 1 | start | 0.430 |
| 1 | 1 | end | 1.420 |
| 2 | 0 | start | 4.100 |
| 2 | 0 | end | 4.512 |
| 2 | 1 | start | 2.500 |
| 2 | 1 | end | 5.000 |
+------------+------------+---------------+-----------+
:编写解决方案,计算每台机器各自完成一个进程任务的平均耗时。
# 用一个表的 作者:HanXin
select machine_id ,
round(
sum(
if(
activity_type ='start' , -timestamp , timestamp
)
) / count(*) * 2
,3
) as processing_time
from Activity
group by machine_id ;
# distinct
SELECT machine_id AS 'machine_id',
ROUND(
SUM(IF(activity_type = 'start', -timestamp, timestamp))
/ COUNT(DISTINCT process_id)
,3) AS 'processing_time'
FROM Activity
GROUP BY machine_id
# 内联 ,2个表一起
SELECT a1.machine_id AS 'machine_id',
ROUND(AVG(a2.timestamp - a1.timestamp)
,3) AS 'processing_time'
FROM Activity AS a1
INNER JOIN Activity AS a2
ON a1.machine_id = a2.machine_id
AND a1.process_id = a2.process_id
AND a1.activity_type = 'start' AND a2.activity_type = 'end'
GROUP BY a1.machine_id
# case when then else end
SELECT machine_id AS 'machine_id',
ROUND(
SUM(
CASE
WHEN activity_type = 'start' THEN -timestamp
ELSE timestamp
END
)
/ COUNT(DISTINCT process_id)
, 3) AS 'processing_time'
FROM Activity
GROUP BY machine_id
2024-3-25
加班
2024-3-26
加班
2024-3-27
编写解决方案,报告每个奖金 少于 1000 的员工的姓名和奖金数额。
https://leetcode.cn/problems/employee-bonus/?envType=study-plan-v2&envId=sql-free-50
select a.name,b.bonus from Employee a
left join Bonus b
on a.empId = b.empId
where b.bonus < 1000 or b.bonus is null
准备开新篇:深度学习、NLP、pytorch 和 tensorflow