我正在尝试使用ExcelWriter将数据帧写入Excel电子表格,但它一直返回错误:
openpyxl.utils.exceptions.IllegalCharacterError
Run Code Online (Sandbox Code Playgroud)
我猜测ExcelWriter不喜欢的数据框中有一些字符.这看起来很奇怪,因为数据框是由三个Excel电子表格组成的,所以我看不出Excel会不会有这样的字符!
有没有办法迭代数据框并替换ExcelWriter不喜欢的字符?我甚至不介意它只是删除它们.
什么是从数据帧中删除或替换非法字符的最佳方法?
我在将列转换为小写时遇到了麻烦.它并不像以下那样简单:
df['my_col'] = df['my_col'].str.lower()
Run Code Online (Sandbox Code Playgroud)
因为我正在迭代很多数据帧,其中一些(但不是全部)在感兴趣的列中都有字符串和整数.如果像上面那样应用,这会导致较低的函数抛出异常:
AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas
Run Code Online (Sandbox Code Playgroud)
我不想强迫类型成为字符串,而是评估值是否为字符串,然后 - 如果是 - 将它们转换为小写,并且 - 如果它们不是字符串 - 将它们保持原样.我认为这会奏效:
df = df.apply(lambda x: x.lower() if(isinstance(x, str)) else x)
Run Code Online (Sandbox Code Playgroud)
但它不起作用......可能是因为我忽略了一些明显的东西,但我看不出它是什么!
我的数据看起来像这样:
OS Count
0 Microsoft Windows 3
1 Mac OS X 4
2 Linux 234
3 Don't have a preference 0
4 I prefer Windows and Unix 3
5 Unix 2
6 VMS 1
7 DOS or ZX Spectrum 2
Run Code Online (Sandbox Code Playgroud) 我有一个摘要df,看起来像这样:
Apples 100
Bananas 34
Kumquats 54
Greengages 101
Apples;Kumquats 5
Bananas;Greengages 7
Run Code Online (Sandbox Code Playgroud)
我想通过将组合水果的数量分成单个项目来简化它:
Apples 105
Bananas 41
Kumquats 59
Greengages 108
Run Code Online (Sandbox Code Playgroud)
即我弄掉行一样Apples;Kumquats,但增加了两个Apples和Kumquats通过5。
在Pandas中,有什么好方法吗?
我正在尝试折叠数据框中的行,该数据框包含一列ID数据和多个列,每列包含不同的字符串.它看起来像groupby是解决方案,但似乎倾向于在组上执行一些数字函数 - 我只想保留文本.这就是我所拥有的......
我有一个表格的数据框:
index ID apples pears oranges
0 101 oranges
1 134 apples
2 576 pears
3 837 apples
4 576 oranges
5 134 pears
Run Code Online (Sandbox Code Playgroud)
列是干净的:所以苹果列中只有文本"apples",或者它将是空白的".
如果在同一ID下有多个条目(在本例中,在ID 134和576上),我想将这些行折叠在一起以获得:
index ID apples pears oranges
0 101 oranges
1 134 apples pears
2 576 pears oranges
3 837 apples
Run Code Online (Sandbox Code Playgroud)
我可以通过迭代行来做到这一点,但它似乎是一个非熊猫的解决方案.有没有更好的办法?
我听说你并不打算将程序编程风格强加到R.我发现这很难.我刚刚用for循环解决了一个问题.这是错的吗?有更好的,更"R风格"的解决方案吗?
问题:我有两列:Col1和Col2.Col1包含以自由格式输入的职务.我想使用Col2将这些职位分类收集到类别中(因此"初级技师","工程技师"和"机械技术"都被列为"技师".
我这样做了:
jobcategories<-list(
"Junior Technician|Engineering technician|Mech. tech." = "Technician",
"Manager|Senior Manager|Group manager|Pain in the ****" = "Manager",
"Admin|Administrator|Group secretary" = "Administrator")
for (currentjob in names(jobcategories)) {
df$Col2[grep(currentjob,data$Col1)] <- jobcategories[[currentjob]]
}
Run Code Online (Sandbox Code Playgroud)
这会产生正确的结果,但我不能动摇(因为我的程序经验)我没有正确使用R的感觉.R专家可以让我摆脱困境吗?
编辑
我被问到原始数据.不幸的是,我无法提供它,因为它有机密信息.它基本上是两列.第一列仅包含400多行不同的职位(以及奇怪的个人姓名).大约有20种不同的类别可以分成这400种标题.第二列以NA开始,然后在运行for循环后填充.
我希望在熊猫图表中为每个柱赋予不同的颜色。根据这篇文章和类似的文章,该解决方案看起来非常简单。
当我尝试模拟解决方案时,最终所有条形都使用相同的颜色(尽管与标准颜色不同)。我想我做错了什么,但我看不出它是什么。有人看到吗?
fig = df.plot(kind='bar', # Plot a bar chart
legend=False, # Turn the Legend off
width=0.75, # Set bar width as 75% of space available
figsize=(8,5.8), # Set size of plot in inches
colormap='Paired')
Run Code Online (Sandbox Code Playgroud)
这colormap='Paired'是要更改颜色的位。我得到这个:

很好,但是所有条形都是相同的颜色!如上所示,我正在对图进行其他更改,但它们都是文本格式或删除轴详细信息。
我有一个 Pandas 数据框,用于收集进行交易的供应商的名称。由于此数据是从银行对帐单中自动收集的,因此许多供应商都相似……但并不完全相同。总之,我想用一个名称替换供应商名称的不同排列。
我想我可以找到一种方法来做到这一点(见下文),但我是一个初学者,在我看来这是一个复杂的问题。我真的很想知道更有经验的编码人员会如何处理它。
我有一个这样的数据框(在现实生活中,它大约有 20 列,最多大约 50 行):
Groceries Car Luxuries
0 Sainsburys Texaco wst453 Amazon
1 Sainsburys bur Texaco east Firebox Ltd
2 Sainsbury's east Shell wstl Sony
3 Tesco Shell p/stn Sony ent nrk
4 Tescos ref 657 Texac Amazon EU
5 Tesco 45783 Moto Amazon marketplace
Run Code Online (Sandbox Code Playgroud)
我想找到类似的条目并将它们替换为这些条目的第一个实例,所以我最终会得到这个:
Groceries Car Luxuries
0 Sainsburys Texaco wst453 Amazon
1 Sainsburys Texaco wst453 Firebox Ltd
2 Sainsburys Shell wstl Sony
3 Tesco Shell wstl Sony
4 Tesco Texaco wst453 Amazon …Run Code Online (Sandbox Code Playgroud)